54. 螺旋矩陣

Heisenberg-Wong發表於2020-10-05

給定一個包含 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]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/spiral-matrix

思路:順時針模擬,

注意紅色和綠色遍歷需要滿足:left<=right,top<=bottom

黃色和藍色遍歷需要滿足:left<right,top<bottom

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> res;
        if(matrix.size()==0)
            return res;
        int n=matrix.size(),m=matrix[0].size();
        for(int i=0;i<=n/2&&i<=m-1-i&&i<=n-1-i;i++)//left<=right,top<=bottom
        {
            for(int j=i;j<m-i;j++)
            {
                res.push_back(matrix[i][j]);
                // cout<<"a";
            }
            for(int k=i+1;k<n-i;k++)
            {
                res.push_back(matrix[k][m-i-1]);
                // cout<<"b";
            }
            if(n-1-i>i&&m-1-i>i)left<right,top<bottom
            {
                for(int t=m-i-2;t>=i&&(n-1-i)>i;t--)
                {
                    res.push_back(matrix[n-1-i][t]);
                    // cout<<"c";
                }
                for(int z=n-i-2;z>i&&i<m-i-1;z--)
                {
                    res.push_back(matrix[z][i]);
                    // cout<<"d";
                }
            }
        }
        return res;
    }
};

 

相關文章