T59. Spiral Matrix II【Medium】
題目
給一個(gè)整數(shù) n,構(gòu)造一個(gè) 1~n2 的螺旋排序的正方形矩陣。
例如:
當(dāng) n = 3 時(shí),
應(yīng)該返回如下矩陣:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路
這題和 leetcode 第 54 題解決方法幾乎一樣。
(在我的 每天一題LeetCode【第39天】 有對(duì)第 54 題的分析)
接下來說本題思路,首先還是拿出這張丑圖 (*  ̄? ̄*):

畫圈圈時(shí)有三個(gè)要點(diǎn):
① 畫完一行(列),下次再到這行(列)時(shí)會(huì)畫它的內(nèi)圈
② 當(dāng)畫到最后,兩線不能相交(就是下面的 boundriesCrossed 的作用)
③ 每畫一個(gè)點(diǎn)都是前面的點(diǎn)的數(shù)字 + 1
代碼
代碼取自 Top Solution,稍作注釋
public int[][] generateMatrix(int n) {
// 簡歷一個(gè) n × n 的矩陣
int[][] matrix = new int[n][n];
// 若為 0 則直接返回
if (n == 0) {
return matrix;
}
// 設(shè)置初始值
int rowStart = 0;
int rowEnd = n-1;
int colStart = 0;
int colEnd = n-1;
int num = 1; //change
//看有沒有越界,有的話循環(huán)結(jié)束
while (rowStart <= rowEnd && colStart <= colEnd) {
// 畫上面的那行
for (int i = colStart; i <= colEnd; i ++) {
matrix[rowStart][i] = num ++; //change
}
//下一次內(nèi)行
rowStart ++;
// 畫最右邊的列
for (int i = rowStart; i <= rowEnd; i ++) {
matrix[i][colEnd] = num ++; //change
}
//下一次內(nèi)列
colEnd --;
// 畫最下邊的列
for (int i = colEnd; i >= colStart; i --) {
if (rowStart <= rowEnd)
matrix[rowEnd][i] = num ++; //change
}
//下一次內(nèi)行
rowEnd --;
// 畫最左邊的列
for (int i = rowEnd; i >= rowStart; i --) {
if (colStart <= colEnd)
matrix[i][colStart] = num ++; //change
}
//下一次內(nèi)列
colStart ++;
}
return matrix;
}