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²) --- 存储结果矩阵
相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark1 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
码流子1 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven1 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark1 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法