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²) --- 存储结果矩阵
相关推荐
AIVOClaw容剪3 分钟前
AI 成片系统搭建如何让矩阵号差异化从「同一脚本 50 个号发」变成「反推提示词每号一版」——5 模块防止同质化被判搬运 · AI 视频智能体平台
人工智能·矩阵·音视频
橘和柠42 分钟前
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
算法
Mem0rin1 小时前
前缀和:中心下标与数组乘积
数据结构·算法
windliang1 小时前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
漂流瓶jz1 小时前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
Forever Nore1 小时前
LeetCode 6 Z 字形变换 - 按行模拟
算法·leetcode
fkyyly2 小时前
hermes解读
算法·code_agent
过期的秋刀鱼!2 小时前
使用都热编码的分类特征
人工智能·算法·决策树·机器学习·分类·数据挖掘
wabs6662 小时前
关于哈希表【力扣383.赎金信的思考】
算法·leetcode·散列表
love_muming2 小时前
二叉树操作全解析:从递归到层序遍历
java·数据结构·算法·二叉树