54. 螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if(matrix.size() == 0) return res; int left = 0,up = 0, right = matrix[0].size()-1, down = matrix.size()-1; while(left < right && up < down){
int i = left, j = up; while(i < right){ res.push_back(matrix[j][i]); i++; } while(j < down){ res.push_back(matrix[j][i]); j++; } while(i > left){ res.push_back(matrix[j][i]); i--; } while(j > up){ res.push_back(matrix[j][i]); j--; } left++; right--; up++; down--; } if(up == down){ while(left <= right){ res.push_back(matrix[up][left++]); } }else if(left == right){ while(up <= down){ res.push_back(matrix[up++][left]); } } return res; } };
|
思路:
每次将矩阵的外围当做一个圈来处理,然后缩小圈的范围。
直到形不成圈,此时要么是单行,要么是单列,要么是中心点(看做单行,单列都可行),然后单独处理即可。