給定一個(gè)正整數(shù) n,生成一個(gè)包含 1 到 n2 所有元素纲熏,且元素按順時(shí)針順序螺旋排列的正方形矩陣。
示例:
輸入: 3
輸出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路:
- 主題代碼按照螺旋矩陣1,設(shè)置e外變量存儲(chǔ)遞增的元素值,注意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) {
// 對(duì)應(yīng)左下右上四個(gè)方向
switch (go) {
// 對(duì)于橫向,全部掃描獲取
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;
}
總結(jié):
- 第一次遇到該問題花了不少時(shí)間調(diào)試,但在完成之后,遇到本題類似題目,寫起來就是及其簡(jiǎn)單了
- n為0時(shí)傳入空矩陣,為1時(shí)傳入單個(gè)元素值為1的矩陣