剑指29 顺时针打印矩阵

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

 

按层模拟,设置四个标志,每次循环++left,--right,--down,++up。需要注意的是,每次循环按四个方向输出,但是要注意只有一行或者一列的情况,要进行判断和跳出。

 1 class Solution {
 2 public:
 3     vector<int> spiralOrder(vector<vector<int>>& matrix) {
 4         int row=matrix.size();
 5         if(!row)
 6             return {};
 7         int col=matrix[0].size();
 8         int left=0,right=col-1,up=0,down=row-1;
 9         int x=0,y=0;
10         vector<int> ans;
11         while(left<=right && up<=down){
12             //cout<<left<<endl<<right<<endl<<up<<endl<<down;
13             x=left;y=up;
14             for(y=left;y<=right;++y)
15                 ans.push_back(matrix[x][y]);
16             --y;
17             if(up==down) break;
18             for(x=up+1;x<=down;++x)
19                 ans.push_back(matrix[x][y]);
20             --x;
21             if(left==right) break;
22             for(y=right-1;y>=left;--y)
23                 ans.push_back(matrix[x][y]);
24             ++y;
25             for(x=down-1;x>up;--x)
26                 ans.push_back(matrix[x][y]);
27             ++x;
28             
29             ++left;
30             --right;
31             --down;
32             ++up;
33         }
34         return ans;
35     }
36 };

 

posted @ 2020-07-27 23:24  __rookie  阅读(95)  评论(0编辑  收藏  举报