- 题目描述
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
来源:LeetCode
- 示例
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
- 思路分析
和#54几乎一样,都是找到转弯的规律即可。而且这道题相对更简单:因为是方阵,所以如果转了第一个弯,必然会转第二个弯,就不用判断是否会转第二个弯了。
- JAVA实现
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];
int dim = n%2==0 ? n/2 : n/2+1; //有几圈
int num = 1; //填入的数字
for(int d=0; d<dim; d++) {
int i=d, j;
for(j=d; j<n-d; j++) ans[i][j] = num++; //后缀式自增,会先用再+1
j--;
if(d+1 < n-d) {
for(i=d+1; i<n-d; i++) ans[i][j] = num++;
i--;
for(j-=1; j>=d; j--) ans[i][j] = num++;
j++;
if(i-1 > d) {
for(i-=1; i>d; i--) ans[i][j] = num++;
}
}
}
return ans;
}
}