Leetcode 54. Spiral Matrix
2017-01-29 09:56
501 查看
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 [1,2,3,6,9,8,7,4,5].
s思路:
1. 又是一道比较nasty的题,看起来繁琐得很。但仔细思考发现还是有趣味,重复那句话:没有无聊的题,只有无聊的解答过程。如何把规则转换成编程或数学语言:首先,对坐标[x,y],遍历顺序是:y++到右边界;x++到下边界;y–到左边界;x–到上边界,依此法循环往复。这里,有意思的是,上下左右边界并不是固定不变,而是随着遍历发生加一或减一,例如:当y++到右边界时,此时就要把上边界加一,因为这一行都访问完,再不用。最后怎么结束呢?就是当左边界>右边界&&上边界>下边界,即:边界内没有数了!
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].
s思路:
1. 又是一道比较nasty的题,看起来繁琐得很。但仔细思考发现还是有趣味,重复那句话:没有无聊的题,只有无聊的解答过程。如何把规则转换成编程或数学语言:首先,对坐标[x,y],遍历顺序是:y++到右边界;x++到下边界;y–到左边界;x–到上边界,依此法循环往复。这里,有意思的是,上下左右边界并不是固定不变,而是随着遍历发生加一或减一,例如:当y++到右边界时,此时就要把上边界加一,因为这一行都访问完,再不用。最后怎么结束呢?就是当左边界>右边界&&上边界>下边界,即:边界内没有数了!
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { // int m=matrix.size(); if(m==0) return {}; int n=matrix[0].size(); if(m<=1) return matrix[0]; vector<int> res; int l=0,r=n-1; int u=0,d=m-1; while(l<=r&&u<=d){ int x,y; for(y=l;y<=r;y++)//从左往右 res.push_back(matrix[u][y]);//取上边界值 u++; for(x=u;x<=d;x++)//从上往下 res.push_back(matrix[x][r]);//取右边界值 r--; for(y=r;y>=l&&u<=d;y--)//从右往左 res.push_back(matrix[d][y]);//取下边界值 d--; for(x=d;x>=u&&l<=r;x--)//从下往上 res.push_back(matrix[x][l]);//取左边界值 l++; } return res; } };
相关文章推荐
- leetcode 54. Spiral Matrix
- (java)leetcode-54:Spiral Matrix
- [LeetCode]54. Spiral Matrix
- [LeetCode 54] Spiral Matrix
- leetcode-54. Spiral Matrix
- LeetCode *** 54. Spiral Matrix
- LeetCode-54. Spiral Matrix (JAVA)(顺时针打印矩阵)
- LeetCode_OJ【54】Spiral Matrix
- Leetcode 54. Spiral Matrix
- leetcode.array--54. Spiral Matrix
- leetcode 54. Spiral Matrix
- Leetcode-54. Spiral Matrix
- leetcode - 54. Spiral Matrix
- LeetCode-54.Spiral Matrix
- [leetcode54] Spiral Matrix
- 53_leetcode_Spiral Matrix
- [leetcode-54]Spiral Matrix(C语言)
- Leetcode刷题记——54. Spiral Matrix(螺旋矩阵)
- 54. Spiral Matrix
- Middle-题目111:54. Spiral Matrix