螺旋矩阵 II
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解决思路:首先填写矩阵最外一圈,接着依次向内。
对于n行n列的矩阵,每填一圈余下的矩阵为(n-2)行(n-2)列,这个特点可以作为循环的终止条件。
代码如下:
public static int[][] generateMatrix(int n) { if (n==0) return new int[0][0]; if (n==1) return new int[][]{{1}}; int[][] matrix = new int[n][n]; int i,j; int b=0; //每一圈填充时,i,j的开始位置, (0,0),(1,1)...(n-1,n-1) int m = n; // 每填一圈,行数列数自减2 int k = 1; while(m>0) { i = b; j = b; while(j<n-b-1) matrix[i][j++] = k++; // (b,b)->(b,n-b-1) 不包含最后一个 while(i<n-b-1) matrix[i++][j] = k++; // (b,n-b-1)->(n-b-1,n-b-1) 不包含最后一个 while(j>b) matrix[i][j--] = k++; // (n-b-1,n-b-1)->(n-b-1,b) 不包含最后一个 while(i>b) matrix[i--][j] = k++; // (n-b-1,b)->(b,b) 不包含最后一个 b++; m-=2; } // 若n为奇数,最后一圈为1行1列,上述while循环中没有填写 if (n%2 == 1) matrix[b-1][b-1] = k; return matrix; }
posted on 2018-05-12 20:37 Deltadeblog 阅读(146) 评论(0) 编辑 收藏 举报