
难度:Medium
解题思路:按照顺时针一圈一圈的取值,注意每一圈的边界。
代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> ret; if(matrix.empty()) return ret; size_t current_row_num = matrix.size(); size_t current_col_num = matrix[0].size(); int left_top_bound = 0; while(current_row_num != 0 && current_col_num != 0) { int i = left_top_bound ,j = left_top_bound; for(; j < current_col_num+left_top_bound ; j++) { ret.push_back(matrix[i][j]); } j--; i++; for(; i < current_row_num+left_top_bound; i++) { ret.push_back(matrix[i][j]); } i--; j--; for(; j >= left_top_bound && current_row_num > 1; j--) { ret.push_back(matrix[i][j]); } j++; i--; for(; i > left_top_bound && current_col_num > 1; i--) { ret.push_back(matrix[i][j]); } i++; left_top_bound++; current_row_num = (current_row_num >= 2)?current_row_num-2:current_row_num-1; current_col_num = (current_col_num >= 2)?current_col_num-2:current_col_num-1; } return ret; } };
|
运行结果:0ms(0~2.5ms区间),超过26.22%
近期评论