【题解】剑指Offer-29 顺时针打印矩阵

顺时针打印矩阵(剑指Offer-29)

题面

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例

示例 1:

1
2
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

示例 2:

1
2
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制

1
2
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

思路

暴力模拟。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty()) return vector<int>();
vector<int> v;
int u=0, d=matrix.size()-1, l=0, r=matrix[0].size()-1;
while(1){
for(int i=l; i<=r; i++) v.push_back(matrix[u][i]);
if(++u > d) break;

for(int i=u; i<=d; i++) v.push_back(matrix[i][r]);
if(l > --r) break;

for(int i=r; i>=l; i--) v.push_back(matrix[d][i]);
if(u > --d) break;

for(int i=d; i>=u; i--) v.push_back(matrix[i][l]);
if(++l > r) break;
}
return v;
}
};