题目

题解

就是分四种情况,从左到右,上到下,右到左,下到上循环遍历,和59题类似

  • 时间复杂度$O(nm)$
  • 空间复杂度$O(nm)$
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> result;
        if(matrix.empty()) return result;//为空直接返回result
        int d = matrix.size()-1;//下界
        int u = 0;//上界
        int r = matrix[0].size()-1;//右界
        int l = 0;//左界
        while(true){
            for(int i=l;i<=r;i++) result.push_back(matrix[u][i]);//从左到右
            if(++u>d) break;//两个功能,1.u+1,2.加之后若超出界限,则退出,下同
            for(int i=u;i<=d;i++) result.push_back(matrix[i][r]);//从上到下
            if(--r<l) break;
            for(int i=r;i>=l;i--) result.push_back(matrix[d][i]);//从右到左
            if(--d<u) break;
            for(int i=d;i>=u;i--) result.push_back(matrix[i][l]);//从下到上
            if(++l>r) break;
        }
        return result;
    }
};