59.螺旋矩阵II——学习笔记
题目:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
- 1 <= n <= 20
题目来源:力扣(LeetCode)链接
解题思路:
题解:
class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];//定义一个二维数组用来存放结果
int count = 1;//放在数组里面的值1~n*n
int loop = n / 2;//loop表示循环的圈数
int offset = 1;//每次循环,每条边要走的步数n-offset
int mid = n / 2;//n为奇数时的中间索引
int start = 0;//每一圈循环开始的起始位置startX=startY
int i,j;//数组的行列索引
while (loop > 0) {
i = start;
j = start;
//填充上行从左到右(左闭右开)
for(; j < n - offset; j++) {
res[i][j] = count;
count++;
}
//填充右列从上到下(左闭右开),j=n-offset
for(; i < n - offset; i++) {
res[i][j] = count;
count++;
}
//填充下行从右到左(左闭右开),i=n-offset,j=n-offset
for(; j > start; j--) {
res[i][j] = count;
count++;
}
////填充左列从下到上(左闭右开),i=n-offset
for(; i > start; i--) {
res[i][j] = count;
count++;
}
//每一圈循环结束后,要更新起始位置
start++;
//每缩小一圈,步长也要缩小一步
offset++;
//每循环一圈,总的圈数就减1
loop--;
}
//如果n为奇数,则需要单独处理中间位置
if (n % 2 == 1) {
res[mid][mid] = n * n;
}
//返回结果
return res;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!