59. Spiral Matrix II
来源:互联网 发布:数据分析师有前景嘛 编辑:程序博客网 时间:2024/06/13 23:45
题目: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; }};
- 59.Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 程序员:伤不起的三十岁
- Spring 之AOP AspectJ切入点语法详解
- 51Nod-1509-加长棒
- Powercmd之快捷键
- Orace重做日志(联机/归档)
- 59. Spiral Matrix II
- hadoop上eclipse开发环境搭建
- 每个文件都有 .svn文件的问题
- 后台执行的程序通过system()调用ffmpeg卡住 解决办法
- nyoj 1272 表达式求值(中缀式转后缀式)
- 缓存的基本原理
- jmeter JDBC Configuration && JDBC Request
- Node.js中module.exports用法
- uml九种图之用例图 构建图