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²) --- 存储结果矩阵
相关推荐
huohaiyu17 分钟前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
浮芷.24 分钟前
鸿蒙PC端 TTS 并发调用问题详解:资源竞争与队列管理
算法·华为·开源·harmonyos·鸿蒙·鸿蒙系统
装不满的克莱因瓶33 分钟前
掌握感知器的学习原理
人工智能·python·神经网络·算法·ai·卷积神经网络
Lsk_Smion33 分钟前
力扣实训 _ [994].腐烂的橘子/图论
算法·leetcode·图论
轻微的风格艾丝凡41 分钟前
两电平三相VSC整流模式从不控整流平滑切换至有源整流调试记录
算法·dsp·c2000
dongf20191 小时前
R语言KNN算法
算法·数据分析·r语言
小O的算法实验室1 小时前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习
8Qi81 小时前
LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
算法·leetcode·二叉树·动态规划
地平线开发者1 小时前
从 INT64 Div 算子约束到 Cast 修复全流程
算法
2601_961194021 小时前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene