Spiral Matrix

来源:互联网 发布:淘宝 买药 编辑:程序博客网 时间:2024/05/18 02:39

注意细节。

class Solution {public:    vector<int> spiralOrder(vector<vector<int> > &matrix) {        vector<int> result;        int row = matrix.size();        if(row == 0) return result;                int col = matrix[0].size();                int startX = 0;        int startY = 0;                while(row > 0 && col > 0)        {            for(int i=0; i<col; i++)                result.push_back(matrix[startX][startY+i]);            for(int i=1; i<row-1; i++)                result.push_back(matrix[startX+i][startY+col-1]);                        if(row-1 != 0)            {                for(int i=col-1; i>=0; i--)                    result.push_back(matrix[startX+row-1][startY+i]);            }            if(col-1 != 0)            {                for(int i=row-2; i>=1; i--)                    result.push_back(matrix[startX+i][startY]);             }                            row -= 2;            col -= 2;            startX += 1;            startY += 1;        }        return result;    }};

Spiral Matrix II

class Solution {public:    vector<vector<int> > generateMatrix(int n) {        vector<vector<int>> result(n, vector<int>(n));        if(n == 0) return result;                int startX = 0;        int startY = 0;                int val = 1;                while(n > 0)        {            for(int i=0; i<n; i++)                result[startX][startY+i] = val++;            for(int i=1; i<n-1; i++)                result[startX+i][startY+n-1] = val++;                        if(n > 1)            {                for(int i=n-1; i>=0; i--)                    result[startX+n-1][startY+i] = val++;                for(int i=n-2; i>=1; i--)                    result[startX+i][startY] = val++;            }                        n -= 2;            startX += 1;            startY += 1;        }        return result;    }};


0 0