leetcode54. 螺旋矩阵

分析

每遍历一层,就把这一层削去,控制边界即可实现。

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int>ans;
        if(matrix.empty())return ans;
        int u=0,d=matrix.size()-1;//上下边界
        int l=0,r=matrix[0].size()-1;//左右边界
        while(true){
            for(int i=l;i<=r;i++)ans.push_back(matrix[u][i]);//从左到右
            if(++u>d)break;
            for(int i=u;i<=d;i++)ans.push_back(matrix[i][r]);//从上到下
            if(--r<l)break;
            for(int i=r;i>=l;i--)ans.push_back(matrix[d][i]);//从右到左
            if(--d<u)break;
            for(int i=d;i>=u;i--)ans.push_back(matrix[i][l]);//从下到上
            if(++l>r)break;
        }
        return ans;
    }
};