一题目:
二 思路:
模拟依次填数过程,重点在于边界的变化,沿着什么走什么不变
初始边界的设定
三 代码:
/**
* 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
*/
public int[][] generateMatrix(int n) {
int[][] matrix=new int[n][n];
int cur=1,target=n*n;
//初始化边界即数组最大值
int l=0,r=n-1,t=0,b=n-1;
while (cur<=target){
//从左到右==>沿着上边从此时的左边界到右边界
for (int i = l; i <=r ; i++) {
matrix[t][i]=cur++;
}
//上边界下移一位
t++;
//从上到下==》沿着右边界从上边界到下边界
for (int i = t; i <=b ; i++) {
matrix[i][r]=cur++;
}
//右边界左移一位
r--;
//从右到左==》沿着下边界从右到左
for (int i = r; i >=l ; i--) {
matrix[b][i]=cur++;
}
//下边界上移一位
b--;
//从下到上==》沿着左边界从下到上
for (int i = b; i >=t ; i--) {
matrix[i][l]=cur++;
}
//左边界右移一位
l++;
}
return matrix;
}