1 class Solution 2 { 3 public: 4 vector<int> spiralOrder(vector<vector<int>>& matrix) 5 { 6 if (matrix.empty()) return {}; 7 int row=matrix.size(); 8 int col=matrix[0].size(); 9 vector<int> res(row*col,0); 10 int right=col-1,down=row-1; 11 int i=0,j=0,k=0; 12 while(1) 13 { 14 for(int x=j;x<=right;x++) 15 res[k++]=matrix[i][x]; 16 17 if(++i>down) break; 18 19 for(int y=i;y<=down;y++) 20 res[k++]=matrix[y][right]; 21 22 if(--right<j) break; 23 24 for(int x=right;x>=j;x--) 25 res[k++]=matrix[down][x]; 26 27 if(--down<i) break; 28 29 for(int y=down;y>=i;y--) 30 res[k++]=matrix[y][j]; 31 32 if(++j>right) break; 33 } 34 return res; 35 } 36 };
一圈一圈地扫描进容器,扫描的同时更新界限值和起始值