leetcode_spiral_order

难度: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%