LeetCode 59 - Spiral Matrix II

作者 QIFAN 日期 2017-01-17
LeetCode 59 - Spiral Matrix II

原题链接: 59. Spiral Matrix II


题干

给定一个数字 n ,返回一个 n * n 矩阵,并用 1 ~ $n^2$ 以 spiral 顺序填充。

举例
输入: n = 3
输出:

[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]

思路

LeetCode 58 - Spiral Matrix 类似,只是一个是输出,一个数输入。同样是 direction 和 boundary 变量来控制矩阵遍历的走向。

代码:

public int[][] generateMatrix(int n) {
if (n == 0) {
return new int[0][0];
}
int[][] res = new int[n][n];
int direction = 0;
int boundLength = 0;
int row = 0, col = 0;
int num = 1;
int TOTAL = n * n;
while (num <= TOTAL) {
// System.out.println("row=" + row + ", col=" + col);
// 向右
if (direction == 0) {
for (; col < n - boundLength; col++) {
res[row][col] = num++;
}
row++;
col--;
// 向下
} else if (direction == 1) {
for (; row < n - boundLength; row++) {
res[row][col] = num++;
}
col--;
row--;
// 向左
} else if (direction == 2) {
for (; col >= boundLength; col--) {
res[row][col] = num++;
}
row--;
col++;
// 向上
} else {
for (; row > boundLength; row--) {
res[row][col] = num++;
}
row++;
col++;
boundLength++;
}
direction = (direction + 1) % 4;
}
return res;
}