Spiral Matrix My Submissions Question
Total Accepted: 45054 Total Submissions: 212085 Difficulty: Medium
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:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
Subscribe to see which companies asked this question
这道题考察细节实现,考察的程度要比二分查找及其变形要高一些
思路很简单,一层一层的扫描即可,但是实际中会遇到特殊情况。比如从右下往左下扫的时候,比如左下扫到左上的时候。可以考察下下面的几个例子,弄清楚扫的时候的障碍。
[[1,2,3,4]];
[[1],[2],[3],[4]];
以及[[1]].
下面贴上代码,这个是昨晚看了别人之后中午有空写的,用的还是别人的的思路,很是汗颜,对于这类细节实现题还是问题多多。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty()) return res;
int rowEnd = matrix.size() - 1;
int colEnd = matrix[0].size() - 1;
int rowBegin = 0;
int colBegin = 0;
while(rowBegin <= rowEnd && colBegin <= colEnd){
for(int c = colBegin;c <= colEnd;++c){
res.push_back(matrix[rowBegin][c]);
}
++rowBegin;
for(int r = rowBegin;r <= rowEnd;++r){
res.push_back(matrix[r][colEnd]);
}
--colEnd;
if(rowBegin <= rowEnd){
for(int c = colEnd;c >= colBegin;--c){
res.push_back(matrix[rowEnd][c]);
}
}
--rowEnd;
if(colEnd >= colBegin){
for(int r = rowEnd;r >= rowBegin;--r){
res.push_back(matrix[r][colBegin]);
}
}
++colBegin;
}
return res;
}
};