leetcode_spiral_order 发表于 2016-11-24 难度:Medium 解题思路:按照顺时针一圈一圈的取值,注意每一圈的边界。代码如下。 1234567891011121314151617181920212223242526272829303132333435363738394041class 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%