螺旋矩阵 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
这道题和螺旋矩阵是一样的,设置up为0,down为n-1,left为0,right为n-1,都是
- 从上面的left走到right处,此时矩阵最上一行变成up++
- 从右边的up走到down处,此时矩阵右边界变成right–
- 再依次下,左。
- 直到left>right,或者up>down
class Solution {
public int[][] generateMatrix(int n) {
int[][] nums = new int[n][n];
int i = 1, j = 0, up = 0, left = 0, right = n-1, down = n-1;
while(true){
if(left > right) break;
j = left;
while(j <= right) {
nums[up][j++] = i++;
}
up++;
if(up > down) break;
j = up;
while(j <= down) {
nums[j++][right] = i++;
}
right--;
if(left > right) break;
j = right;
while (j >= left)
nums[down][j--] = i++;
down--;
if(up > down) break;
j = down;
while (j >= up)
nums[j--][left] = i++;
left++;
}
return nums;
}
}