题目:
思路:
按数字递增方向逐圈进行赋值
每圈分为四个方向:
从左到右;从上到下;从右到左;从下到上
“每圈” 首个元素位置递增。
可设一个start作为标记。通过每次start++改变位置。
设count,每次++进行赋值,while(count<=n*n)来判断是否结束循环。
对每圈:
左→右
j=start; j<n-start; j++
其中 j<n-start 理解:
源码:
public class lc_59 {
public static int[][] generateMatrix(int n) {
int[][] arr = new int[n][n];
int start=0;
int count = 1;
int i=0,j=0;
while (count<=n*n){
for (j = start;j<n-start;j++)
arr[i][j] = count++;
j--; //因为在for循环中最后j++了一次,故减一次。其他同理
for (i = start+1;i<n-start;i++)
arr[i][j] = count++;
i--;
for (j--;j>=start;j--)
arr[i][j] = count++;
j++;
for (i--;i>start;i--)
arr[i][j] = count++;
i++;
start++;
}
return arr;
}
public static void main(String[] args) {
int[][] a = generateMatrix(3);
for (int i=0;i<6;i++){
for (int j = 0;j<6;j++)
System.out.print(a[i][j]+"\t");
System.out.println();
}
}
}