剑指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 };