题目:
分析:
这道题的主要难点在于如何去进行螺旋
我们可以设各边界的值l,t,r,b (left,top,right,botton)
从第t行的左端开始遍历,直到第t行右端
t++;
再从第t行的末尾,往下,直到第b行的末尾
r--;
从第b行的末尾往第b行的左端
b--;
最后从第b行的第一个数到第t行的第一个数
l++;
如此循环,知道最后一个数等于n^2;
代码:
class Solution {
public int[][] generateMatrix(int n) {
int l = 0, r = n - 1, t = 0, b = n - 1;
int[][] mat = new int[n][n];
int num = 1, tar = n * n;
while(num <= tar){
//从左到右
for(int i = l; i <= r; i++)
mat[t][i] = num++;
t++;
//从上到下
for(int i = t; i <= b; i++)
mat[i][r] = num++;
r--;
//从右到左
for(int i = r; i >= l; i--)
mat[b][i] = num++;
b--;
//从下到上
for(int i = b; i >= t; i--)
mat[i][l] = num++;
l++;
}
return mat;
}
}