59. Spiral Matrix II
2016-09-29 20:39
399 查看
题目:Spiral Matrix II
原题链接: https://leetcode.com/problems/spiral-matrix-ii/Given an integer n, generate a square matrix filled with elements from 1 to n * n in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
给出一个整数 n ,返回一个n * n 的螺旋矩阵。
例如n == 3,返回如下:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
模拟它的产生过程就行。
设i ,j ,up,down,left,right,cnt,其中 i 和 j 表示需要填充位置的下标(i,j),up和down分别表示当前填充范围的上界和下界,left和right则表示左边界和右边界,初始i = j = 0, up = left = 0,down = right = n - 1,cnt 表示当前要填充的数字,初始为1。
由于螺旋矩阵的构造是按照一个螺旋的顺序填充1,2,3,4,5。。。(可以参照样例的矩阵想象这种填充顺序),我们要做的就是模拟这个填充的顺序,每一次把矩阵的外围一圈填满,然后再往内一圈,再往内。。。一直到填充完毕。
四条边的顺序是按照上边,右边,下边,左边的顺序填充,所以分别会有4个循环:
第一个循环:上边
每次填充 i 不变 ,j 递增至边界,即:ans[ i ][ j++] = cnt++;一直到 j == right为止。
调整 i ,j 到下一个待填充的位置,让 i 加1,j 减一;
第二个循环:右边
每次填充 j 不变,i 递增至边界,即:ans[ i++ ][ j ] = cnt++;一直到 i == down为止 。
调整 i ,j 到下一个待填充的位置,让 i 减1,j 减一;
第三个循环:下边
每次填充 i 不变,j 递减到边界,即:ans[ i ][ j– ] = cnt++;一直到 j == left 为止。
调整 i ,j 到下一个待填充的位置,让 i 减1,j 加一;
第四个循环:左边
每次填充 j 不变,i 递减至边界的下一位,即:ans[ i– ][ j ] = cnt++;一直到 i == up + 1为止。
调整 i ,j 到下一个待填充的位置,让 i 加1,j 加一;
此时外围一圈填充结束,开始填充内圈,调整边界大小,即up加一,down减一,left加一,right减一。
重复上述循环,一直到 cnt 超过n * n 为止。
代码如下:
class Solution { public: vector<vector<int>> generateMatrix(int n) { vector<vector<int> > ans(n, vector<int>(n)); int i = 0, j = 0, cnt = 1, up = 0, down = n - 1, left = 0, right = n - 1; while(cnt <= n * n) { while(j <= right && cnt <= n * n) ans[i][j++] = cnt++; j--;i++; while(i <= down && cnt <= n * n) ans[i++][j] = cnt++; i--;j--; while(j >= left && cnt <= n * n) ans[i][j--] = cnt++; i--;j++; while(i > up && cnt <= n * n) ans[i--][j] = cnt++; i++;j++; up++;down--;left++;right--; } return ans; } };
相关文章推荐
- LeetCode 59 Spiral Matrix II(螺旋矩阵II)(Array)
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 【leetcode】59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- leetcode——59——Spiral Matrix II
- 59. Spiral Matrix II
- LeetCode 59 --- Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- LeetCode 59: Spiral Matrix II
- leetcode 59. Spiral Matrix II
- Leetcode59 Spiral Matrix II
- 59. Spiral Matrix II
- LeetCode54/59 Spiral Matrix I/II
- Leetcode 59 Spiral Matrix II
- 54. Spiral Matrix&59. Spiral Matrix II
- [C语言][LeetCode][59]Spiral Matrix II
- 59. Spiral Matrix II