【LeetCode-数组】螺旋矩阵(顺时针打印矩阵)

题目描述

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

输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

题目链接: https://leetcode-cn.com/problems/spiral-matrix/

思路

使用和螺旋矩阵II类似的方法:设置 4 个变量:t、b、l、r,分别表示当前上下左右的范围。然后遍历不断缩小范围,具体见代码,要注意循环的结束条件:

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if(matrix.empty()) return {};

        int t = 0;
        int b = matrix.size()-1;
        int l = 0;
        int r = matrix[0].size()-1;

        vector<int> ans;
        while(true){
            for(int i=l; i<=r; i++) ans.push_back(matrix[t][i]);
            t++;
            if(t>b) break;

            for(int i=t; i<=b; i++) ans.push_back(matrix[i][r]);
            r--;
            if(r<l) break;

            for(int i=r; i>=l; i--) ans.push_back(matrix[b][i]);
            b--;
            if(b<t) break;

            for(int i=b; i>=t; i--) ans.push_back(matrix[i][l]);
            l++;
            if(l>r) break;
        }
        return ans;
    }
};
  • 时间复杂度:O(m x n)
    m、n 为行列数。
  • 空间复杂度:O(1)
posted @ 2020-07-06 21:51  Flix  阅读(436)  评论(0编辑  收藏  举报