题目描述
Given an integer n, generate a square matrix filled with elements from 1 to n 2 in spiral order.
For example,
Given n =3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
解析:螺旋矩阵算是数组中比较经典的问题了。如何构造螺旋矩阵返回呢?我们可以把该数组看成是构造上方、右方、下方、左方来构造。注意:每构造一个上、右、下、左就把循环数+1,就像剥洋葱一样,搞完一层就少一层。
public class Solution {
public int[][] generateMatrix(int n) {
int [][] arr = new int[n][n];
int count=0;//构造的数
int x=0;
int y=0;
int num=1;
int cycle=0;//控制循环的层数
while (count!=(n*n)){
while (y<(n-cycle)&&(count!=(n*n))){//上方
arr[x][y]=num++;
y++;
count++;
}
y--;
x++;
while (x<n-cycle&&(count!=(n*n))){//右方
arr[x][y]=num++;
x++;
count++;
}
x--;
y--;
while (y>=cycle&&(count!=(n*n))){//下方
arr[x][y]=num++;
y--;
count++;
}
y++;
x--;
while (x>cycle&&(count!=(n*n))){//左侧
arr[x][y]=num++;
x--;
count++;
}
x++;
y++;
cycle++;//完成一圈循环数+1,下次内圈变小
}
return arr;
}
}