class Solution {
//key observe: when any component is done, its beginX,endX or beginY,endX will change
public:
vector<int> spiralOrder(vector<vector<int> >& matrix) {
vector<int> result;
if (matrix.empty()) return result;
int beginX = 0, endX = matrix[0].size() - 1;
int beginY = 0, endY = matrix.size() - 1;
while (true) {
// From left to right
for (int i = beginX; i <= endX; ++i)
result.push_back(matrix[beginY][i]);
if (++beginY > endY) break;
// From top down
for (int i = beginY; i <= endY; ++i)
result.push_back(matrix[i][endX]);
if (beginX > --endX) break;
// From right to left
for (int i = endX; i >= beginX; --i)
result.push_back(matrix[endY][i]);
if (beginY > --endY) break;
// From bottom up
for (int i = endY; i >= beginY; --i)
result.push_back(matrix[i][beginX]);
if (++beginX > endX) break;
}
return result;
}
};
second time
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(matrix.size() == 0) return vector<int>();
int x1 = 0;
int y1 = 0;
int x2 = matrix.size()-1;
int y2 = matrix[0].size()-1;
vector<int> ans;
while(x1 <= x2 && y1 <= y2)
{
//up row
for(int i = y1; i <= y2; ++i) ans.push_back(matrix[x1][i]);
//right column
for(int i = x1+1; i <= x2; ++i) ans.push_back(matrix[i][y2]);
//bottom row
if(x2 != x1)
for(int i = y2-1; i >= y1; --i) ans.push_back(matrix[x2][i]);
//left column
if(y1 != y2)
for(int i = x2-1; i > x1; --i) ans.push_back(matrix[i][y1]);
x1++, y1++, x2--, y2--;
}
return ans;
}
};
本文提供了一种螺旋遍历二维矩阵的方法,通过四个方向的循环迭代实现从外向内逐层遍历矩阵元素。该算法适用于多种编程场景,如数据处理、图像处理等。
1149

被折叠的 条评论
为什么被折叠?



