59.螺旋矩阵 II
题目
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
方法
定义四个索引top、bottom、left、right,分别代表长方形上下左右四条边的索引。
按照从左到右、从上到下、从右到左、从下到上的顺序将数值填入数组,每次填入后更新边界(比如说从左到右填入完之后,更新top为top+1)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public int[][] generateMatrix(int n) { int[][] res = new int[n][n]; int count = 1; int top = 0, bottom = n - 1, left = 0, right = n - 1; while(count <= n * n){ for(int i = left; i <= right; i++){ res[top][i] = count++; } top++; for(int i = top; i <= bottom; i++){ res[i][right] = count++; } right--; for(int i = right; i >= left; i--){ res[bottom][i] = count++; } bottom--; for(int i = bottom; i >= top; i--){ res[i][left] = count++; } left++; } return res; }
|