基本思路:区间都是左闭右开
start用来控制索引的开始和结束
举例:
第0圈填充:
从左到右和从下到上的索引均是从0开始
从右到左和从上到下的索引均是以0结束
第1圈填充:
从左到右和从下到上的索引均是从1开始
从右到左和从上到下的索引均是以1结束
public class Solution {
public int[][] generateMatrix(int n){
int[][] res = new int[n][n]; //二维数组
int loop = n / 2; // 循环的次数
int mid = n / 2; // n为奇数时,中间位置
int start = 0;
int count = 1; // 给螺旋矩阵填充数值
for (int offset = 1; offset < loop + 1; offset++) {
// 从左到右填充
for (int i = start; i < n - offset; i++) {
res[start][i] = count++;
}
// 从上到下填充
for (int i = start; i < n - offset; i++) {
res[i][n-offset] = count++;
}
// 从右到左填充
for (int i = n - offset; i > start ; i--) {
res[n-offset][i] = count++;
}
// 从下到上填充
for (int i = n-offset; i > start; i--) {
res[i][start] = count++;
}
start++;
}
if (n % 2 == 1) {
res[mid][mid] = count;
}
return res;
}
}