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. 在每个while循环中写 (count < sum)
2. 没有设定条件 if(count >= sum) break;
3. n == 0 以及m == 0 分开考虑
4. --j;++i; 等这种没有完整考虑
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
vector<int>r;
if(m == 0) return r;
int n = matrix[0].size();
if(n == 0) return r;
int sum = m * n;
int i = 0, j = 0, count = 0, begin = 0;
vector<int>res(sum, 0);
while(count < sum){
i = begin, j = begin;
while((count < sum) && (j < n - begin)){
res[count++] = matrix[i][j++];
}
if(count >= sum) break;
--j;
++i;
while(count < sum && i < m - begin)
res[count++] = matrix[i++][j];
if(count >= sum) break;
--i;
--j;
while(count < sum && j >= begin)
res[count++] = matrix[i][j--];
if(count >= sum) break;
++j;
--i;
while(count < sum && i > begin)
res[count++] = matrix[i--][j];
begin++;
}
return res;
}
};