美文网首页LeeCode题目笔记
2019-08-19 螺旋矩阵

2019-08-19 螺旋矩阵

作者: Antrn | 来源:发表于2019-08-19 22:37 被阅读0次

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

    示例 1:

    输入:

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

    输出:

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

    示例 2:

    输入:

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

    输出:

    [1,2,3,4,8,12,11,10,9,5,6,7]
    
    C++
    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            if(matrix.empty() || matrix[0].empty()) return {};
            int x = matrix.size();
            int y = matrix[0].size();
            
            vector<int> res(x*y);
            vector<vector<int>> m(x, vector<int>(y, 0));
            vector<vector<int>> dirs{{0,1}, {1,0}, {0,-1}, {-1,0}};
            int r=0,c=0,k=0;
            for(int i=0;i<x*y;i++){
                res[i] = matrix[r][c];
                m[r][c] = 1;
                r+=dirs[k][0];
                c+=dirs[k][1];
                if(k == 0&&(c>=y || m[r][c] == 1)){
                    c -= 1;
                    r += 1;
                    k = (k+1)%4;
                }
                if(k == 1&& (r>=x || m[r][c] == 1)){
                    r -= 1;
                    c -= 1;
                    k = (k+1)%4;
                }
                if(k == 2&&(c<0 || m[r][c] == 1)){
                    c += 1;
                    r -= 1;
                    k = (k+1)%4;
                }
                if(k == 3&&(r<0 || m[r][c] == 1)){
                    r += 1;
                    c += 1;
                    k = (k+1)%4;
                }
                
            }
            return res;
        }
    };
    

    相关文章

      网友评论

        本文标题:2019-08-19 螺旋矩阵

        本文链接:https://www.haomeiwen.com/subject/hrsysctx.html