Spiral Matrix (LeetCode)

Question:

https://oj.leetcode.com/problems/spiral-matrix/

 

没有算法,就是一圈一圈的取值。加上考虑一些边界条件。

 

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {
        
        vector<int> result;
        
        int rowCount = matrix.size();
        
        if (rowCount == 0)
            return result;
            
        int colCount = matrix[0].size();
        
        int row_start = 0;
        int row_end = rowCount-1;
        
        int col_start = 0;
        int col_end = colCount-1;
        
        while (row_start <= row_end && col_start <= col_end)
        {
            spiral(matrix, result, row_start, row_end, col_start, col_end);
            
            row_start++;
            row_end--;
            col_start++;
            col_end--;
        }
    
        return result;
    }
    
    void spiral(vector<vector<int>>& matrix, vector<int>& result, int row_start, int row_end, int col_start, int col_end)
    {
        for (int i = col_start; i <= col_end; i++)
            result.push_back(matrix[row_start][i]);
            
        for (int i = row_start+1; i <= row_end-1; i++)
            result.push_back(matrix[i][col_end]);
        
        if (row_end != row_start)
        {
            for (int i = col_end; i >= col_start; i--)
            {
                result.push_back(matrix[row_end][i]);
            }
        }
        
        if (col_end != col_start)
        {
            for (int i = row_end-1; i >= row_start+1; i--)
                result.push_back(matrix[i][col_start]);
        }
    }
};

 

posted @ 2014-11-19 14:15  smileheart  阅读(142)  评论(0)    收藏  举报