整体代码(模仿法)
class Solution {
public int[][] generateMatrix(int n) {
int[][] arrs=new int[n][n];
int l=0;int r=n-1;int t=0;int b=n-1;
int cen=n*n; int num=1;
while(num<=cen){
for(int i=l;i<=r;i++)arrs[t][i]=num++;
t++;
for(int i=t;i<=b;i++)arrs[i][r]=num++;
r--;
for(int i=r;i>=l;i--)arrs[b][i]=num++;
b--;
for(int i=b;i>=t;i--)arrs[i][l]=num++;
l++;
}
return arrs;
}
}
int[][] arrs=new int[n][n];
1.注意:new后边写的数据类型,不是数组名。
理解for循环的执行机制:for(int i=l;i<=r;i++)arrs[t][i]=num++;
把for循环中分为四部分:Aint i=l
,Bi<=r
,C方法体的代码
.Di++
其中A只会执行一次。然后就判段B的条件是否满足,如果满足才会往下执行,不满足直接退出循环。最后可执行顺序可表示为ABCDBCDBCD
…直到退出循环。
2.题解中代码的细节:
(1)i
的值在每次循环都会使用i++
或i--
来进行该变,目的是找到要填充的数组位置。
(2)通过i<=r
,i<=b
,i>=l
,i>=t
来控制循环的退出。
(3)循环途中的代码到底执行几次,是由int i=l;i<=r;i++
来控制的,若用i<=r
执行次数为:r-l+1
。若用i<r
执行次数为:r-l
(前提是i++。)