力扣-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(mn)
  • 空间复杂度:O(1)
posted @   DawnTraveler  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示