题目:给你一个正整数 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;
}
}
标签:count,59,start,int,res,矩阵,II,++,offset
From: https://www.cnblogs.com/benben-home/p/17232593.html