题目描述:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
类似于之前的那道题目:
代码:
class Solution {
public int[][] generateMatrix(int n) {
int [][] result = new int[n][n];
int leftup[] = {0,0};
int rightup[] = {0,n - 1};
int leftdown[] = {n - 1,0};
int rightdown[] = {n - 1,n - 1};
int size = n * n + 1;
int tem = 1;
while (true) {
// 右走
if(leftup[1] <= rightup[1]){
for (int i = leftup[1]; i <= rightup[1]; i++) {
// result.add(matrix[leftup[0]][i]);
result[leftup[0]][i] = tem ++;
}
leftup[0] ++;
rightup[0] ++;
}
if(size == tem){
break;
}
// 下走
if(rightup[0] <= rightdown[0]){
for (int i = rightup[0]; i <= rightdown[0]; i++) {
// result.add(matrix[i][rightdown[1]]);
result[i][rightdown[1]] = tem ++;
}
rightup[1] --;
rightdown[1]--;
}
if(size == tem){
break;
}
// 左走
if(rightdown[1]>= leftdown[1]){
for (int i = rightdown[1]; i >= leftdown[1]; i--) {
// result.add(matrix[leftdown[0]][i]);
result[leftdown[0]][i] = tem ++;
}
leftdown[0]--;
rightdown[0]--;
}
if(size == tem){
break;
}
// 上走
if(leftdown[0] >= leftup[0]){
for (int i = leftdown[0]; i >= leftup[0]; i--) {
// result.add(matrix[i][leftup[1]]);
result[i][leftup[1]] = tem ++;
}
leftup[1] ++;
leftdown[1] ++;
}
if(size == tem){
break;
}
}
return result;
}
}