Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Example:
1 2 3 4 5 6 7
|
Input: 3 Output: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
|
解法
之前的那道题是螺旋形遍历数组,这题是螺旋形生成数组,方法都差不多,设置边界与方向,为二维数组赋值,同样注意处理1和0输入的情况。感觉第二次写这类题思路顺畅了很多呢(^_^)~
具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
class { public int[][] generateMatrix(int n) { int[][] res = new int[n][n]; if (n == 1) { res[0][0] = 1; return res; } int max = n * n; int i = 0; int j = 0; int upbond = 0; int lowbond = n - 1; int leftbond = 0; int rightbond = n - 1; int dir = 0; res[i][j] = 1; for (int k = 2; k <= max; k++) { switch (dir) { case 0: { j++; res[i][j] = k; if (j == rightbond) { dir = 1; upbond++; } break; } case 1: { i++; res[i][j] = k; if (i == lowbond) { dir = 2; rightbond--; } break; } case 2: { j--; res[i][j] = k; if (j == leftbond) { dir = 3; lowbond--; } break; } case 3: { i--; res[i][j] = k; if (i == upbond) { dir = 0; leftbond++; } break; } } } return res; } }
|
近期评论