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<vector<int> > generateMatrix(int n) {
vector<vector<int> > ret;
for(int i = 0; i < n; i++) {
vector<int> item(n);
ret.push_back(item);
}
int x1 = 0, x2 = n - 1;
int y1 = 0, y2 = n - 1;
int x = 1;
while(x1 <= x2 && y1 <= y2) {
for(int i = y1; i < y2; i++) ret[x1][i] = x++;
for(int j = x1; j <= x2; j++) ret[j][y2] = x++;
if(x1 != x2)
for(int i = y2 - 1; i > y1; i--) ret[x2][i] = x++;
if(y1 != y2)
for(int j = x2; j > x1; j--) ret[j][y1] = x++;
x1++; x2--;
y1++; y2--;
}
return ret;
}
};