顺时针打印矩阵

 1 vector<int> spiralOrder(vector<vector<int>>& matrix) {
 2 vector<int> arr;
 3 if(matrix.empty())        
 4   return arr;
 5 int len = matrix.size();
 6 int wid = matrix[0].size();
 7 vector<int> vis(len*wid,0);
 8 int i = 0,j = 0;
 9 bool sign = true;
10 
11 while(sign) {
12   if(i < len && j < wid){
13       if(vis[i*len+j]==0)  {arr.push_back(matrix[i][j]); vis[i*len+j] = 1;}
14       if(j+1<wid) { if(vis[i*len+j+1]==0)  { j++; continue; }}
15       if(i+1 <len) { if(vis[(i+1)*len+j]==0) { i++; continue; }}
16       if(j > 0) { if(vis[i*len+j-1]==0){ j--; continue;}}
17       if(i > 0) { if(vis[(i-1)*len+j]==0}{ while(vis[(i-1)*len+j]==0) { i--;
18                       arr.push_back(matrix[i][j]);  vis[i*len+j] = 1; } }
19       if(arr.size() == len*wid) sign = false;
20 }
21       return arr;
22 }
23 }

解题思路:向右--向下--向左--向上。当输出数组size()与矩阵数组大小相同,结束循环。

首先:将第一个节点输出

向右:横坐标加1,标记,输出,直到到达最右边

向下:纵坐标加1,标记,输出,直到到达最下边

向左:横坐标-1,标记,输出,直到到达最左边

向上:纵坐标-1,标记,输出,到达已经标记的下一行

完成第一次顺时针,不断循环,直到达到循环结束条件

posted @ 2020-05-29 15:41  糖糖_彭  阅读(150)  评论(0编辑  收藏  举报