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].
1:顺时针访问矩阵的时候注意四种情况,
vector<int> spiralOrder(vector<vector<int> > &matrix)
{
vector<int> result;
if(matrix.size() == 0 || matrix[0].size() == 0)
{
return result;
}
int rows = (int)matrix.size();
int columns = (int)matrix[0].size();
int startX = 0;
int startY = 0;
while(rows > 2 * startX && columns > 2 * startY)
{
spiralOrderCore(matrix, startX, startY, result);
startX++;
startY++;
}
return result;
}
void spiralOrderCore(vector<vector<int> > &matrix, int startX, int startY, vector<int> &result)
{
int rows = (int)matrix.size();
int columns = (int)matrix[0].size();
int endX = rows - startX - 1;
int endY = columns - startY - 1;
for(int i = startY; i <= endY; i++)
{
result.push_back(matrix[startX][i]);
}
if(endX > startX)
{
for(int i = startX + 1; i <= endX; i++)
{
result.push_back(matrix[i][endY]);
}
}
if(endY > startY && endX > startX)
{
for(int i = endY - 1; i >= startY; i--)
{
result.push_back(matrix[endX][i]);
}
}
if(endY > startY && endX - 1 > startX)
{
for(int i = endX - 1; i > startX; i--)
{
result.push_back(matrix[i][startY]);
}
}
}
本文介绍了一种矩阵螺旋遍历的算法实现,该算法能够按顺时针螺旋顺序返回矩阵的所有元素。通过四个核心步骤,即从左到右、从上到下、从右到左及从下到上,确保了遍历过程的正确性和完整性。
195

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



