牛客(1)

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

思路:主要关注4个角,根据是哪个角,在做出相应的操作。

代码如下:

 1 class Solution {
 2 public:
 3     vector<int> printMatrix(vector<vector<int> > matrix) {
 4       vector<int> results;
 5         if (matrix.size() == 0) {
 6             return results;
 7         }
 8          
 9         int x = 0; 
10         int y = 0; //当前元素的位置
11  
12         int xf = 0;
13         int yf = 1;//xf和yf表示当前元素位置指针的方向,-1表后退,0停止,1前进
14  
15         int rows = matrix.size()-1;        //
16         int cols = matrix.at(0).size()-1; //17         //当只有一行时
18         if (rows == 0) {
19             for (int i = 0; i <= cols; i++) {
20                 results.push_back(matrix.at(0).at(i));
21             }
22             return results;
23         }
24         //当只有一列时
25         if (cols == 0) {
26             for (int i = 0; i <= rows; i++) {
27                 results.push_back(matrix.at(i).at(0));
28             }
29             return results;
30         }
31  
32         int x_start = 0;
33         int y_start = 0;
34  
35         int x_end = rows;
36         int y_end = cols;
37  
38         bool isFirst = true;
39  
40         int size = (rows+1)*(cols+1);    //元素个数
41         while (results.size() < size) {
42             results.push_back(matrix[x][y]);    //记录当前元素
43             x += xf;                            //横坐标变换
44             y += yf;                            //纵坐标变化
45             //开始进行四个角的判断以及相关操作
46             if (x == x_start && y == y_end) {
47                 xf = 1;
48                 yf = 0;
49                 if (!isFirst) {
50                     y_start += 1;
51                 }
52             }
53             if (x == x_end && y == y_end) {
54                 xf = 0;
55                 yf = -1;
56                 y_end -= 1;
57                 
58                  
59             }
60             if (x == x_end && y == y_start) {
61                 xf = -1;
62                 yf = 0;
63                 x_start += 1;
64                  
65             }
66             if (x == x_start && y == y_start) {
67                 xf = 0;
68                 yf = 1;
69                 x_end -= 1;
70                 isFirst = false;
71             }
72         }
73         return results;
74 }
75 };

 

posted @ 2016-12-16 21:09  china_sdd  阅读(242)  评论(0编辑  收藏  举报