(Leetcode 2021 刷题计划) 54. 螺旋矩阵

2021-03-17 10:11:30 浏览数 (1)

每日一题时间: 2020-03-15 题目链接: 54. 螺旋矩阵 官方题解链接: 螺旋矩阵

题目

给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

代码语言:txt复制
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

解题方法

按层模拟

代码语言:txt复制
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if (matrix.size() == 0 || matrix[0].size() == 0) {
            return {};
        }

        int rows = matrix.size(), columns = matrix[0].size();
        vector<int> order;
        int left = 0, right = columns - 1, top = 0, bottom = rows - 1;
        while (left <= right && top <= bottom) {
            for (int column = left; column <= right; column  ) {
                order.push_back(matrix[top][column]);
            }
            for (int row = top   1; row <= bottom; row  ) {
                order.push_back(matrix[row][right]);
            }
            if (left < right && top < bottom) {
                for (int column = right - 1; column > left; column--) {
                    order.push_back(matrix[bottom][column]);
                }
                for (int row = bottom; row > top; row--) {
                    order.push_back(matrix[row][left]);
                }
            }
            left  ;
            right--;
            top  ;
            bottom--;
        }
        return order;
    }
};
  • 复杂度分析
    • 时间复杂度: O(MN)
    • 空间复杂度: O(1)
      • MN 分别是输入矩阵的行数和列数

参考资料

  1. 54. 螺旋矩阵
  2. 螺旋矩阵

0 人点赞