题目链接:https://leetcode-cn.com/problems/spiral-matrix-ii/
题目描述:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
解答
把1~n^2的值顺时针螺旋填入数组中,按照自左向右、自上向下、自右向左、自下向上的顺序填入。使用left、right、top、bottom分别表示左边界、右边界、上边界和下边界。
class Solution {
public int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int left=0,right=n-1,top=0,bottom=n-1;
int num=1;
while(num <= n*n) {
//从左到右填充,填充完毕之后,top行填满,要将top+1向下移动。
for(int i=left;i<=right;i++){
res[top][i] = num;
num++;
}
top++;
//从上往下填充,填充完毕之后,right列填满,要将right-1
for(int i=top;i<=bottom;i++){
res[i][right] = num++;
}
right--;
//从右向左填充,填充完毕之后,bottom行填满,要将bottom-1
for(int i=right;i>=left;i--){
res[bottom][i] = num++;
}
bottom--;
//从下向上填充,填充完毕之后,left列填满,要将left+1
for(int i=bottom;i>=top;i--){
res[i][left] = num++;
}
left++;
}
return res;
}
}