数组的螺旋输出,重点在于每次输出一个口 一层一层的
代码:
//每次输出一个口 public ListspiralOrder(int[][] matrix) { List result=new ArrayList (); if(null==matrix||matrix.length==0) return result; int n=matrix.length; int m=matrix[0].length; int i=0; //上 int j=m-1; //左 int k=n-1; //下 int l=0; //右 if(n==1){ for(int index=0;index =l;down--) result.add(new Integer(matrix[k][down])); for(int right=k-1;right>i;right--) result.add(new Integer(matrix[right][l])); i++; j--; k--; l++; } if(i==k) for( int end=l;end<=j;end++) result.add(new Integer(matrix[i][end])); if(l==j&&i!=k)//防止中心点重复 for(int over=i;over<=k;over++) result.add(new Integer(matrix[over][l])); return result; }
反过来:
public int[][] generateMatrix(int n) { if(n<0)return null; int matrix[][]=new int[n][n]; int num=1; int m=n; int i=0; //上 int j=m-1; //左 int k=n-1; //下 int l=0; //右 if(n==1){ for(int index=0;index=l;down--) matrix[k][down]=num++; for(int right=k-1;right>i;right--) matrix[right][l]=num++; i++; j--; k--; l++; } if(i==k) for( int end=l;end<=j;end++) matrix[i][end]=num++; if(l==j&&i!=k)//防止中心点重复 for(int over=i;over<=k;over++) matrix[over][l]=num++; return matrix; }