剑指offer - 顺时针打印矩阵

题目

https://www.nowcoder.com/questionTerminal/9b4c81a02cd34f76be2659fa0d54342a

题意

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

题解

记录左右上下四个边界值,以一圈为一个周期循环。
注意可能,最后一圈不够一圈。

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> printMatrix(vector<vector<int> > matrix) {
vector<int> ans;
int xmin = 0,xmax = matrix.size()-1;
int ymin = 0,ymax = matrix[0].size()-1;
while(1){
for(int i=ymin;i<=ymax;i++)
ans.push_back(matrix[xmin][i]);
if(++xmin>xmax) break;
for(int i=xmin;i<=xmax;i++)
ans.push_back(matrix[i][ymax]);
if(ymin>--ymax) break;
for(int i=ymax;i>=ymin;i--)
ans.push_back(matrix[xmax][i]);
if(xmin>--xmax) break;
for(int i=xmax;i>=xmin;i--)
ans.push_back(matrix[i][ymin]);
if(++ymin>ymax) break;
}
return ans;
}
};