问题描述:
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] Output: [1,2,3,4,8,12,11,10,9,5,6,7]
源码:
结果截图
剑指offer面试题29,可以不用子函数,会快很多,但是鲁棒性降低了。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
if(matrix.size() == 0) return result;
int row = matrix.size(), col = matrix[0].size();
if(col==0) return result;
for(int index=0; index*2<row && index*2<col; index++){
// cout<<index<<endl;
for(int i=index; i<=col-index-1; i++)
result.push_back(matrix[index][i]);
for(int i=index+1; i<=row-index-1; i++)
result.push_back(matrix[i][col-index-1]);
if(row-index-1>index){
for(int i=col-index-2; i>=index; i--)
result.push_back(matrix[row-index-1][i]);
}
if(col-index-1>index){
for(int i=row-index-2; i>=index+1; i--)
result.push_back(matrix[i][index]);
}
}
return result;
}
};