【Leet Code】54. Spiral Matrix---Medium
2015-11-05 10:35
183 查看
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
You should return
思路:
此题目就是要按照从左-> 右,上->下,右->左,下->上的顺序遍历二维数组。
以上面的例子为例详解过程:
其中x(对应j)代表每行的元素,y(对应i)代表每列的元素,每次访问完要对sx,sy,ex或ey的值做加减操作。一定不要搞混x(j)和y(i)的关系与顺序。
给出另一个行和列不相等的例子:
输出结果:[2,5,4,-1,0,8]
代码实现:
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return
[1,2,3,6,9,8,7,4,5].
思路:
此题目就是要按照从左-> 右,上->下,右->左,下->上的顺序遍历二维数组。
以上面的例子为例详解过程:
1 | 2 | 3 | ex |
4 | 5 | 6 | |
7 | 8 | 9 | |
ey | (ex, ey) |
给出另一个行和列不相等的例子:
[ [ 2, 5 ], [ 8, 4 ], [ 0, -1 ] ]
输出结果:[2,5,4,-1,0,8]
代码实现:
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> results; if(matrix.size() < 1) return results; int sx = 0, sy = 0, ex = matrix[0].size(), ey = matrix.size(); while(sx < ex || sy < ey) { // right if(sy < ey) { for(int i = sy, j = sx; j < ex; ++j) results.push_back(matrix[i][j]); ++sy; } // down if(sx < ex) { for(int i = sy, j = ex-1; i < ey; ++i) results.push_back(matrix[i][j]); --ex; } // left if(sy < ey) { for(int i = ey - 1, j = ex - 1; j >= sx; --j) results.push_back(matrix[i][j]); --ey; } // up if(sx < ex) { for(int i = ey - 1, j = sx; i >= sy; --i) results.push_back(matrix[i][j]); ++sx; } } return results; } };
相关文章推荐
- flash播放器插件与flash播放器的区别
- 水煮栗子
- good excel website
- Javascript DOM操作实例
- HDU 2243 考研路茫茫——单词情结
- drools6.3.0+eclipse开发环境搭建
- Excel商业图表制作精选-张辛-专题视频课程
- UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multibyte s
- 视频会议根据不同行业应用要求体现不同价值
- 《C Primer Plus》学习笔记之 C内存管理
- scanf()、gets()、getchar()函数的学习笔记
- 几个常用的linux快捷键和shell知识
- Java代码性能优化总结
- 【HDU1572】【旅行商问题 状压DP 数据小全排列暴力】下沙小面的(2)
- linux-grep 命令详解!
- Linux基础之/bin、 /sbin、/ usr/bin,、/usr/sbin的用处
- 99 CLLocation的基本使用
- C语言逗号表达式 (100,200,500)(a,b,c)
- 建行E商贸通支付开发系列之六(生产环境与总结)
- Ajax总结