题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
题解
这种多次循环的题要特别注意边界条件,这里给出一种简单易懂清晰的通用模板,用四个变量up,down,left,right分别表示上下左右四个方向,按照螺旋的方向一层一层的遍历,更改方向的边界。当超出边界时立马跳出循环,代码如下
public int[][] generateMatrix(int n) {
if (n < 1) return new int[0][0];
int[][] matrix = new int[n][n];
int left = 0, right = n - 1, up = 0, down = n - 1;
int index = 1;
while (true) {
for (int i = left; i <= right; i++) {
matrix[up][i] = index++;
}
up++;
if (up > down) break;
for (int i = up; i <= down; i++) {
matrix[i][right] = index++;
}
right--;
if (right < left) break;
for (int i = right; i >= left; i--) {
matrix[down][i] = index++;
}
down--;
if (down < up) break;
for (int i = down; i >=up; i--) {
matrix[i][left] = index++;
}
left++;
if (left > right) break;
}
return matrix;
}