题目:
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]
.
思路:
按照从左到右,从上到下,从右到左,从下到上的顺序遍历。
代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix)
{
vector<int> result;
int rowEnd = matrix.size() - 1;
if(rowEnd < 0)
return result;
int colEnd = matrix[0].size() - 1;
int rowBegin = 0;
int colBegin = 0;
while(true)
{
// From left to right
for(int j = colBegin ; j <= colEnd ; j++ )
{
result.push_back(matrix[rowBegin][j]);
}
if(++rowBegin > rowEnd)
break;
// From top to bottom
for(int i = rowBegin ; i <= rowEnd ; i++)
{
result.push_back(matrix[i][colEnd]);
}
if(colBegin > --colEnd )
break;
// From right to left
for(int j = colEnd ; j >= colBegin ; j--)
{
result.push_back(matrix[rowEnd][j]);
}
if(rowBegin > --rowEnd)
break;
// From bottom to top
for(int i = rowEnd ; i >= rowBegin ; i--)
{
result.push_back(matrix[i][colBegin]);
}
if(++colBegin > colEnd)
break;
}
return result;
}
};