思路
这题其实挺基础的,开这篇博文也只是为了记录一下该类“异型遍历”题型的套路,主要就是突出一个代码清晰逻辑明确。
代码
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> ans; int left = 0; int right = matrix[0].size() - 1; int top = 0; int bottom = matrix.size() - 1; int area = matrix.size() * matrix[0].size(); // 一圈一圈向内收 while (area >= 1) { // 从左上往右上 for (int i = left; i <= right && area >= 1; i++) { ans.push_back(matrix[top][i]); area--; } // 往下挪一层 top++; // 从右上往右下 for (int i = top; i <= bottom && area >= 1; i++) { ans.push_back(matrix[i][right]); area--; } // 往左挪一格 right--; // 从右下往左下 for (int i = right; i >= left && area >= 1; i--) { ans.push_back(matrix[bottom][i]); area--; } // 往上挪一层 bottom--; for (int i = bottom; i >= top && area >= 1; i--) { ans.push_back(matrix[i][left]); area--; } // 往右挪一格 left++; } return ans; } };
评论
还没有任何评论,你来说两句吧!