54. 螺旋矩阵

自己做
解:螺旋遍历

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m = matrix.size(); //行数int n = matrix[0].size(); //列数int sum = m * n; //总数m * nint top = 0; //上边界int bottom = m - 1; //下边界int left = 0; //左边界int right = n - 1; //右边界vector<int> res; //存放结果int i = 0;while (1) {//==========================从左往右,抵达右边界前,向右遍历==========================for (int j = left; j <= right; j++) {res.push_back(matrix[top][j]);i++;}top++; //上边界往下压//一条线走完判断是否已经遍历完了整个矩阵if (i == sum)break;//==========================从上往下,抵达下边界前,向下遍历==========================for (int j = top; j <= bottom; j++) {res.push_back(matrix[j][right]);i++;}right--; //右边界往左移//一条线走完判断是否已经遍历完了整个矩阵if (i == sum)break;//==========================从右往左,抵达左边界前,向左遍历==========================for (int j = right; j >= left; j--) {res.push_back(matrix[bottom][j]);i++;}bottom--; //下边界往上抬//一条线走完判断是否已经遍历完了整个矩阵if (i == sum)break;//==========================从下往上,抵达上边界前,向上遍历==========================for (int j = bottom; j >= top; j--) {res.push_back(matrix[j][left]);i++;}left++; //左边界往右动//一条线走完判断是否已经遍历完了整个矩阵if (i == sum)break;}return res;}
};
