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]
.
分析:两个思路,思路一从[0,0] 到[1][1]到[n/2][n/2]访问矩形,思路二设置x、y的界限不断缩小
class Solution {
vector<int> ret;
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int row = matrix.size();
if(row == 0) return ret;
int col = matrix[0].size();
int x1 = 0, x2 = row - 1;
int y1 = 0, y2 = col - 1;
while(x1 <= x2 && y1 <= y2) {
for(int i = y1; i < y2; i++) ret.push_back(matrix[x1][i]);
for(int j = x1; j <= x2; j++) ret.push_back(matrix[j][y2]);
if(x1 != x2)
for(int i = y2 - 1; i > y1; i--) ret.push_back(matrix[x2][i]);
if(y1 != y2)
for(int j = x2; j > x1; j--) ret.push_back(matrix[j][y1]);
x1++; x2--;
y1++; y2--;
}
return ret;
}
};