leetcode
来源:互联网 发布:2011年网络春晚 编辑:程序博客网 时间:2024/05/20 22:00
54. Spiral Matrix
Given a matrix of m x n elements(m rows, n columns), return all elements of thematrix in spiral order.
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].
算法思想
不断地输出最外面的圈,直到输出完毕。具体要输出多少圈数,为长和宽的较小值再除以2,(画个矩阵就可以看出来),每一个环由4个部分组成的,横,竖,再横,再竖,顺时针刚好走一圈,值得注意的是要注意边界值和重复输出的问题,最好是画个图然后标记出下标来求解。
步骤
(第一行指的是开始的第一横行,第一列是第一行后输出的第一列,类似描述同义。
圈数从第0圈开始。
1. 设x,y为当前点的下标,其大小等于圈数的值
2. 输出从当前点第一行和第一列。
3. 判断是否为当行或者单列:
a) 若为单行或者单列,则不用重复输出第二行和第二列。
b) 否则,输出第二行和第二列
4. 圈数+1,跳回第1步。
class Solution {public: int n ; int m ; vector<int> r; void add_el(int x,int y,vector<vector<int>>& a){ for(int i = x ; i <= n ; i++)r.push_back(a[x][i]); for(int i = y+1 ; i <= m ; i++) r.push_back(a[i][n]); if(m == x || n == x)return; for(int i = n-1 ; i >= x ; i--)r.push_back(a[m][i]); for(int i = m-1 ; i > x ; i--)r.push_back(a[i][x]); } vector<int> spiralOrder(vector<vector<int>>& a) { if(a.size() < 1)return r; m = a.size()-1; n = a[0].size()-1; int k = n; k = min(n/2,m/2); for(int i = 0 ; i <= k ; i++){ add_el(i,i,a); n --; m--; }//for(i) return r; }};
1 0
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- leetcode
- 弹性盒模型(一)
- Linux进程关系包含session
- .Net异步编程知多少
- 51nod-1163 最高的奖励(贪心)
- JavaScript基本概念
- leetcode
- rocketmq,IBM mq,kafka ,rabbitmq
- 学习Layout总结
- 字符串面试题
- PAT算法笔记(四)————锤子剪刀布
- 【bzoj3531】[SDOI2014]旅行
- android 获取HOME组件的Activity信息
- c语言实现通讯录(动态内存开辟)
- 抢救DB2数据之终极工具:db2dart