而求解本题依然是要坚持循环不变量原则。
模拟顺时针画矩阵的过程:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
由外向内一圈一圈这么画下去。
可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是一进循环
class Solution {
public int[][] generateMatrix(int n) {
int[][] arr=new int[n][n];
int z=n-1;
int count=1;
int target=0;
for(int i=0;i<n/2;i++){
for(int j=i;j<z-i;j++){
arr[i][j]=count++;
}
for(int a=i;a<z-i;a++){
arr[a][z-i]=count++;
}
for(int b=z-i;b>i;b--){
arr[z-i][b]=count++;
}
for(int c=z-i;c>i;c--){
arr[c][i]=count++;
}
}
if(n%2!=0){
arr[n/2][n/2]=n*n;
}
return arr;
}
}
深似海,从此offer是路人。