题目链接
- https://leetcode.cn/problems/spiral-matrix-ii/
解题思路
- 模拟法
- 每个颜色代表一条边,这里使用左闭右开原则,剩下的就是模拟了。
- 注意一下循环次数为n/2,还有就是当n为奇数时要给最中心的点赋值
AC代码
class Solution {
public int[][] generateMatrix(int n) {
int loop = 0;//控制循环次数
int[][] ans = new int[n][n];
int start = 0;//每次玄幻的开始点(start,start)
int count = 1;//定义填充数字
int i, j;
while (loop++ < n / 2) {
//模拟上侧从左到右
for (j = start; j < n - loop; j++) {
ans[start][j] = count++;
}
//模拟右侧从上到下
for (i = start; i < n - loop; i++) {
ans[i][j] = count++;
}
//模拟下侧从右到左
for (; j >= loop; j--) {
ans[i][j] = count++;
}
//模拟左侧从下到上
for (; i >= loop; i--) {
ans[i][j] = count++;
}
start++;
}
if (n % 2 == 1) {
ans[start][start] = count;
}
return ans;
}
}