LeetCode 59. 螺旋矩阵 II

LeetCode 59. 螺旋矩阵 II

题目描述

给定正整数 n,构造一个 n×n 的方阵,按顺时针螺旋顺序填入 1 的所有整数。

示例

输入:3

输出:

复制代码
[
 [1, 2, 3],
 [8, 9, 4],
 [7, 6, 5]
]

解题思路

模拟顺时针填充过程,通过维护四条边界逐步收缩:

  1. 初始化 :创建 n×n 矩阵,设定初始边界 top=0, bottom=n-1, left=0, right=n-1
  2. 分层填充
    • 上层 :从左到右填充 top 行,完成后 top++
    • 右层 :从上到下填充 right 列,完成后 right--
    • 下层 :从右到左填充 bottom 行,完成后 bottom--
    • 左层 :从下到上填充 left 列,完成后 left++
  3. 终止条件 :当填充数字超过 时结束

代码实现

java 复制代码
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        int num = 1, max = n * n;
        int top = 0, bottom = n - 1, left = 0, right = n - 1;
        
        while (num <= max) {
            // 上层:从左到右
            for (int i = left; i <= right; i++) matrix[top][i] = num++;
            top++;
            
            // 右层:从上到下
            for (int i = top; i <= bottom; i++) matrix[i][right] = num++;
            right--;
            
            // 下层:从右到左
            for (int i = right; i >= left; i--) matrix[bottom][i] = num++;
            bottom--;
            
            // 左层:从下到上
            for (int i = bottom; i >= top; i--) matrix[i][left] = num++;
            left++;
        }
        return matrix;
    }
}

复杂度分析

  • 时间复杂度:O(n²) --- 每个元素被访问一次
  • 空间复杂度:O(n²) --- 存储结果矩阵
相关推荐
Elias不吃糖5 小时前
LeetCode每日一练(209, 167)
数据结构·c++·算法·leetcode
铁手飞鹰6 小时前
单链表(C语言,手撕)
数据结构·c++·算法·c·单链表
悦悦子a啊6 小时前
项目案例作业(选做):使用文件改造已有信息系统
java·开发语言·算法
小殊小殊6 小时前
【论文笔记】知识蒸馏的全面综述
人工智能·算法·机器学习
无限进步_6 小时前
C语言动态内存管理:掌握malloc、calloc、realloc和free的实战应用
c语言·开发语言·c++·git·算法·github·visual studio
im_AMBER6 小时前
AI井字棋项目开发笔记
前端·笔记·学习·算法
Wadli6 小时前
项目2 |内存池1|基于哈希桶的多种定长内存池
算法
TT哇6 小时前
【BFS 解决拓扑排序】3. ⽕星词典(hard)
redis·算法·宽度优先
橘颂TA6 小时前
【剑斩OFFER】算法的暴力美学——判定字符是否唯一
算法·c/c++·结构与算法
ModestCoder_7 小时前
PPO-clip算法在Gymnasium的Pendulum环境实现
人工智能·算法·机器人·具身智能