Spiral Matrix II
来源:互联网 发布:php源码分析弱类型 编辑:程序博客网 时间:2024/06/03 19:51
题目名称
Spiral Matrix II—LeetCode链接
描述
Given an integer n, generate a square matrix filled with elements from 1 to n2 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的二维向量,按从最外圈到最内圈的数序来将数字填进去,如图所示:
两层循环,外层循环表示对哪一圈进行处理,内层循环对所在圈的位置进行赋值。
int a=0,b=n-1,val=0;while(a<b){ for(int i=0;i<(b-a);i++){ res[a][a+i]=++val; res[a+i][b]=val+(b-a); res[b][b-i]=val+2*(b-a); res[b-i][a]=val+3*(b-a); } val = res[a+1][a]; a++; b--;}
考虑到n为奇数时,最内圈只有一个格子,上述循环会丢失最内圈一个元素的赋值,所以当n为奇数时,要增加一个判断:
if(n%2!=0){ res[n/2][n/2]=n*n;}
C++代码
vector< vector<int> > generateMatrix(int n) { vector< vector<int> > res; if(n<=0) return res; vector<int> row(n,0); res.insert(res.end(),n,row); if(n==1){ res[0][0]=1; return res; } int a=0,b=n-1,val=0; while(a<b){ for(int i=0;i<(b-a);i++){ res[a][a+i]=++val; res[a+i][b]=val+(b-a); res[b][b-i]=val+2*(b-a); res[b-i][a]=val+3*(b-a); } val = res[a+1][a]; a++; b--; } if(n%2!=0){ res[n/2][n/2]=n*n; } return res; }
总结
根据上一道题目对二维数组按照由外到内的每一圈进行处理,这也是对二维数组处理的一个经验。
0 0
- Spiral Matrix && Spiral Matrix II
- LeetCode: Spiral Matrix II
- LeetCode Spiral Matrix II
- [Leetcode] Spiral Matrix II
- LeetCode : Spiral Matrix II
- Spiral Matrix II
- [LeetCode] Spiral Matrix II
- Spiral Matrix II
- Spiral Matrix II
- [LeetCode]Spiral Matrix II
- Spiral Matrix II
- Spiral Matrix I(II)
- Spiral Matrix II
- [leetcode]Spiral Matrix II
- LeetCode-Spiral Matrix II
- [leetcode] Spiral Matrix II
- LeetCode - Spiral Matrix II
- Spiral Matrix II
- MacVim安装与配置
- [c] ★ 宏和函数的区别
- hive sql 执行计划实例2
- hdu 4640 Island and study-sister(最短路+状压dp)
- iOS之MBProgressHUD用法总结
- Spiral Matrix II
- JDBC-实现操作:增、删、改(DML)
- Spring中的字符编码过滤器
- TOJ 1547. To and Fro【栈和队列】
- Intellij IDE 使用集锦(更新中...)
- hdu 4642 Fliping game(博弈)
- 算法性能评估-时间复杂度
- 关于js 函数传递引用参数理解
- iOS-字典转模型(单模型)的实现