码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 54. Spiral Matrix

时间:2018-06-03 00:59:49      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:++   res   复杂   etc   while循环   方向   相对   spi   mat   

题目核心是矩阵遍历。以前做过类似的题,不过是正方形的情况。我都是由外向内,层一个for循环,四个方向一个for循环,坐标计算相对复杂。

换一种思路,记矩阵左上角坐标(i1,j1),右下角(i2,j2)。一个大的while循环,按照四个方向遍历,缩小矩阵。其实思路和之前一样,只不过规避掉了坐标繁琐的计算。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if (matrix.size()==0) return res;
        int i1=0, i2=matrix.size()-1;
        int j1=0, j2=matrix[0].size()-1;
        while (i1<=i2 && j1<=j2){
            for (int j=j1;j<=j2;++j) 
                res.push_back(matrix[i1][j]);
            for (int i=i1+1;i<=i2;++i) 
                res.push_back(matrix[i][j2]);
            if (i1<i2){ //如果不判断,只有一行的情况会重复输出
                for (int j=j2-1;j>=j1;--j) 
                    res.push_back(matrix[i2][j]);
            }
            if (j1<j2){
                for (int i=i2-1;i>=i1+1;--i) 
                    res.push_back(matrix[i][j1]);    
            }
            ++i1; ++j1;
            --i2; --j2;
        }
        return res;
    }
};

 

LeetCode 54. Spiral Matrix

标签:++   res   复杂   etc   while循环   方向   相对   spi   mat   

原文地址:https://www.cnblogs.com/hankunyan/p/9127515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!