LeetCode 螺旋矩阵 II
Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目
螺旋矩阵 II:
给你一个正整数 n
,生成一个包含 1
到 n^2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
来源:力扣(LeetCode) 链接: 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
解题分析
题解思路
-
模拟矩阵的生成。按照要求,初始位置设为矩阵的左上角,初始方向设为向右。若下一步的位置超出矩阵边界,或者是之前访问过的位置,则顺时针旋转,进入下一个方向。如此反复直至填入 n^2 个元素。
-
记
matrix
为生成的矩阵,其初始元素设为0
。由于填入的元素均为正数,我们可以判断当前位置的元素值,若不为0
,则说明已经访问过此位置。
复杂度分析
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
解题代码
题解代码如下(代码中有详细的注释说明):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | class Solution { public int [][] generateMatrix( int n) { int maxNum = n * n; int curNum = 1 ; // 螺旋矩阵定义 int [][] matrix = new int [n][n]; // 行和列 int row = 0 , column = 0 ; int [][] directions = {{ 0 , 1 }, { 1 , 0 }, { 0 , - 1 }, {- 1 , 0 }}; int directionIndex = 0 ; // 生成矩阵 while (curNum <= maxNum) { // 右上角从 1 开始 matrix[row][column] = curNum; // 当前值累加 curNum++; // 计算下一个单元格的位置 int nextRow = row + directions[directionIndex][ 0 ]; int nextColumn = column + directions[directionIndex][ 1 ]; // 范围判断 if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >=n || matrix[nextRow][nextColumn] != 0 ) { // 顺时针旋转到下一个方向 directionIndex = (directionIndex + 1 ) % 4 ; } // 到下一个格子 row = row + directions[directionIndex][ 0 ]; column = column + directions[directionIndex][ 1 ]; } // 返回 return matrix; } } |
提交后反馈结果:
参考信息
分类:
IntelliJ IDEA
, IDEA
标签:
IDEA
, IntelliJ IDEA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了