leetcode 054 —— Spiral Matrix
2015-07-23 19:35
369 查看
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
思路:从最外圈遍历到最内圈
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m = matrix.size(); //行
if (!m) return res; //空的情况
int n = matrix[0].size(); //列
int lim = (min(m,n)+ 1) / 2; <span style="white-space:pre"> </span>//层数
for (int level = 0; level < lim; level++){
for (int j = level; j <= n - level - 1; j++) //遍历up边
res.push_back(matrix[level][j]);
if (level == lim - 1 && m-level*2 == 1) //最后一行为奇数行
break;
for (int j = level + 1; j < m - level - 1; j++) //遍历right边
res.push_back(matrix[j][n - 1 - level]);
for (int j = n - level - 1; j >= level; j--) //遍历down边
res.push_back(matrix[m - 1 - level][j]);
if (level == lim - 1 && n - level * 2 == 1) //最后一列为奇数列
break;
for (int j = m - level - 2; j>level; j--) //遍历left边
res.push_back(matrix[j][level]);
}
return res;
}
};
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].
思路:从最外圈遍历到最内圈
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m = matrix.size(); //行
if (!m) return res; //空的情况
int n = matrix[0].size(); //列
int lim = (min(m,n)+ 1) / 2; <span style="white-space:pre"> </span>//层数
for (int level = 0; level < lim; level++){
for (int j = level; j <= n - level - 1; j++) //遍历up边
res.push_back(matrix[level][j]);
if (level == lim - 1 && m-level*2 == 1) //最后一行为奇数行
break;
for (int j = level + 1; j < m - level - 1; j++) //遍历right边
res.push_back(matrix[j][n - 1 - level]);
for (int j = n - level - 1; j >= level; j--) //遍历down边
res.push_back(matrix[m - 1 - level][j]);
if (level == lim - 1 && n - level * 2 == 1) //最后一列为奇数列
break;
for (int j = m - level - 2; j>level; j--) //遍历left边
res.push_back(matrix[j][level]);
}
return res;
}
};
相关文章推荐
- PHP的MySQLi函数库的使用 以及 表单的字符编码配置
- OC基本数据类型-NSString
- python cookielib 登录人人网
- HDU 1860 统计字符
- 文件与流
- longlong 及long double类型及输出
- POJ 4020 NEERC John's inversion 贪心+归并求逆序对
- APP请求定位服务
- 关于opencv 无法成功读视频的问题
- html跳转,获取get提交参数
- C#设置默认打印机
- Trs系统开发
- HDU 1242 Rescue(优先队列+bfs)
- JAVA学习第八天
- Android开发遇到的细节问题(一)
- 大约Android PopupWindow有用Spinner控件点击APP Crash案例整理!
- Best Time to Buy and Sell Stock
- POJ 1149 PIGS
- 黑马程序员——第四篇_正则表达式
- Xml解析器(java用的)