给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路:
- 主题代码按照螺旋矩阵1,设置e外变量存储递增的元素值,注意n为0或1的边界值处理即可.
传送门
代码:
public int[][] generateMatrix(int n){
if(n == 0) return new int[0][0];
if(n == 1) {
int[][] n1 = new int[1][1];
n1[0][0] = 1;
return n1;
}
int matrix[][] = new int[n][n];
int i = 0, j = 0, wid = n, high = n, go = 0,k = 1;
while (k < n * n) {
// 对应左下右上四个方向
switch (go) {
// 对于横向,全部扫描获取
case 0:
while (j < wid) {
matrix[i][j] = k;
k++;
j++;
}
j--;
i++;
go++;
break;
case 1:
while (i < high - 1) {
matrix[i][j] = k;
k++;
i++;
}
go++;
break;
case 2:
while (j >= n - wid) {
matrix[i][j] = k;
k++;
j--;
}
j++;
i--;
go++;
high--;
break;
case 3:
while (i > n - high) {
matrix[i][j] = k;
k++;
i--;
}
go = 0;
wid--;
break;
}
}
return matrix;
}
总结:
- 第一次遇到该问题花了不少时间调试,但在完成之后,遇到本题类似题目,写起来就是及其简单了
- n为0时传入空矩阵,为1时传入单个元素值为1的矩阵
网友评论