力扣-59. 螺旋矩阵 II

1.题目

题目地址(59. 螺旋矩阵 II - 力扣(LeetCode))

https://leetcode.cn/problems/spiral-matrix-ii/

题目描述

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

 

示例 1:

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

示例 2:

输入:n = 1
输出:[[1]]

 

提示:

  • 1 <= n <= 20

2.题解

基本上同 54.螺旋矩阵 I , 这里为方便只写一种方法了

2.1 分层模拟

代码

  • 语言支持:C++

C++ Code:


class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n));
        int rowBegin = 0, rowEnd = n - 1; // 行
        int colBegin = 0, colEnd = n - 1; // 列
        int cnt = 1;
        while (true) {
            // 从左向右遍历(行)
            for (int i = colBegin; i <= colEnd; i++)
                ans[rowBegin][i] = cnt++; // rowBegin 这行已经遍历过了, 下次不可以再遍历, ++rowBegin
            if (++rowBegin > rowEnd)
                break;

            // 从上向下遍历(列)
            for (int i = rowBegin; i <= rowEnd; i++)
                ans[i][colEnd] = cnt++; // colEnd 这列已经遍历过了, 下次不可以再遍历, --colEnd
            if (--colEnd < colBegin)
                break;

            // 从右向左遍历(行)
            for (int i = colEnd; i >= colBegin; i--)
                ans[rowEnd][i] = cnt++;
            if (--rowEnd < rowBegin)
                break;

            // 从下向上遍历(列)
            for (int i = rowEnd; i >= rowBegin; i--)
                ans[i][colBegin] = cnt++;
            if (++colBegin > colEnd)
                break;
        }
        return ans;
    }
};

复杂度分析

令 n 为数组长度。

  • 时间复杂度:\(O(m * n)\)
  • 空间复杂度:\(O(1)\)
posted @ 2024-04-27 14:55  DawnTraveler  阅读(18)  评论(0)    收藏  举报