class Solution {
public int[][] generateMatrix(int n) {
int [][] nums = new int[n][n];
int start = 0 , offset = 1 ,count = 1;
int i=0, j=0;
int times = 0 ;
while(times ++ < n/2 ){
for( j =start; j< n-offset ; j++){
nums[start][j] = count++ ;}
for( i=start; i < n-offset ; i++){
nums[i][j] = count++ ;}
for( ; j>start ; j--){
nums[i][j] = count++ ;}
for( ; i > start ; i--){
nums[i][j] = count++ ;}
start ++ ;
offset ++ ;
}if( n%2 == 1){
int q = (1+n) / 2 -1 ;
nums[q][q] = count ;
}
return nums ;
}
}
总结:
1.利用while进行固定次数的循环,用的是定义times的方式。数学知识,转n/2圈。
2.第一次循环后 到第二次循环开始,从左至右的数组横坐标要用start,不能用i,上一次循环后的i是0,所以i必须更新到新的start。