描述:
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
思路:
这题看起来是很复杂,做起来也确实挺复杂的。但是呢,这题并不是非常非常难,只是控制逻辑让人很抓狂罢了。
colStart,colEnd,rowStart,rowEnd,num=0
1.colStart<colEnd 为arr[row][colStart]~arr[row][colEnd-1]赋值num++;
2.rowStart<rowEnd 为arr[col][rowStart]~ar[col][rowEnd-1]赋值num++;
3.colEnd>colStart 为arr[rowLen-1-row][colEnd]~arr[rowLen-1-row][colStart+1]赋值num++;
4.rowEnd>rowStart 为arr[colLen-1-col][rowEnd]~arr[colLen-1-col][rowStart+1]赋值num++;
代码:
public int[][] generateMatrix(int n) { int matrix[][]=null; if(n<0) return matrix; else if(n==0) { matrix=new int [1][]; matrix[0]=new int[]{}; } matrix=new int[n][]; for(int i=0;i<n;i++) matrix[i]=new int[n]; int startNum=1; int rows=n,cols=n; int x=0,y=0; while(x<cols-x&&y<rows-y) { int end=cols-x-1; if(x<end) { for(int i=x;i<end;i++) matrix[y][i]=startNum++; } end=rows-y-1; if(y<end) { for(int j=y;j<end;j++) matrix[j][cols-x-1]=startNum++;; } int start=cols-x-1; if(start>x) { for(int i=start;i>x;i--) matrix[rows-y-1][i]=startNum++;; } start=rows-y-1; if(start>y) { for(int j=start;j>y;j--) matrix[j][x]=startNum++; } if(2*x+1==cols&&2*y+1==rows) matrix[y][x]=startNum++;; x++; y++; } return matrix; }
时间: 2024-10-08 19:36:40