我的题解
关键就是如何去找这个循环,如何去遍历,我刚开始想到了以圈来进行遍历
但是问题是我并没有想到是四个循环分别是遍历四条边
我想的是通过一个循环来四条边,i=1的时候遍历第一条边,然后i=2的时候遍历第二条边...
上面的也能做出来,但是你会发现这个完全是没必要的,因为你要通过if语句来进行判断这个循环是哪一条边
if(k==1){
for(i=circle,j=circle;j<n-1-circle;j++){
arr[i][j]=num++; //对其进行赋值
}
}
if(k==2){
for(i=circle;i<n-1-circle;i++){
arr[i][j]=num++;
}
}
...类似这种,完全没必要
class Solution {
public int[][] generateMatrix(int n) {
int[][] arr = new int[n][n];
int circle = 0;
int i=0,j=0;
int num=1;
while(circle<n/2){
for(i=circle,j=circle;j<n-1-circle;j++){
arr[i][j]=num++;
}
for(i=circle;i<n-1-circle;i++){
arr[i][j]=num++;
}
for(j=n-1-circle;j>circle;j--){
arr[i][j]=num++;
}
for(i=n-circle-1;i>circle;i--){
arr[i][j]=num++;
}
circle++;
}
if(n%2==1){
arr[n/2][n/2]=num;
}
return arr;
}
}
完整代码带有测试代码
public class 螺旋矩阵 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入这个n");
int n= input.nextInt();
int [][] arr = generateMatrix(n);
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");;
}
System.out.println();
}
input.close();
}
public static int[][] generateMatrix(int n) {
int[][] arr = new int[n][n];
int circle = 0;
int i=0,j=0;
int num=1;
while(circle<n/2){
for(i=circle,j=circle;j<n-1-circle;j++){
arr[i][j]=num++;
}
for(i=circle;i<n-1-circle;i++){
arr[i][j]=num++;
}
for(j=n-1-circle;j>circle;j--){
arr[i][j]=num++;
}
for(i=n-circle-1;i>circle;i--){
arr[i][j]=num++;
}
circle++;
}
if(n%2==1){
arr[n/2][n/2]=num;
}
return arr;
}
}