LintCode 螺旋矩阵 (新解法)

来源:互联网 发布:知乎 感情 精华贴 编辑:程序博客网 时间:2024/06/05 10:51

给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。

样例

给定如下矩阵:

[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]

应返回 [1,2,3,6,9,8,7,4,5]

有趣的新解法思路:由当前坐标通过简单的逻辑分析可得下一个坐标


class Solution {public:    /**     * @param matrix a matrix of m x n elements     * @return an integer array     */    vector<int> spiralOrder(vector<vector<int>>& matrix) {        // Write your code here        vector<int> res;           if(matrix.size() == 0)        return res;                 const int m = matrix.size();         const int n = matrix[0].size();                         bool flag[m][n] ;                int coord[2] = {0};        int screw[m][n] ;        for(int i = 0; i <= m * n; i++)        {            flag[(i - 1) / n][(i - 1) % n] = 0;                    }                              for(int i = 1; i <= m * n; i++ )    {        res.push_back(matrix[coord[0]][coord[1]]);    //screw[coord[0]][coord[1]] = matrix[(i - 1) / 4][(i - 1) % 4] ;    //cout<<"("<<coord[0]<<","<<coord[1]<<")->"<<endl;    if( coord[1] + 1 < n && flag[coord[0]][coord[1] + 1] != 1)        {               if(coord[0] - 1 >= 0 && flag[coord[0] - 1][coord[1]] != 1)    {    flag[coord[0]][coord[1]] = 1;    coord[0]--;    }    else    {    flag[coord[0]][coord[1]] = 1;    coord[1]++;    }        }        else if(coord[0] + 1 < m && flag[coord[0] + 1][coord[1]] != 1)        {        flag[coord[0]][coord[1]] = 1;        coord[0]++;        }        else if( coord[1] - 1 >= 0 && flag[coord[0]][coord[1] - 1] != 1)        {        flag[coord[0]][coord[1]] = 1;        coord[1]--;        }        else if(coord[0] - 1 >= 0 && flag[coord[0] - 1][coord[1]] != 1)        {        flag[coord[0]][coord[1]] = 1;        coord[0]--;        }        else        flag[coord[0]][coord[1]] = 1;    }            return res;            }            };


0 0