leetcode 旋转矩阵 中等

leetcode 旋转矩阵 中等

 

 

可以用递归来做,每一次这当前的这一圈加入 vector<int> answer。

但需要注意,不要枚举圈数,这样代码比较难写(需要考虑的边界条件挺多的,而且很多下标还要自己算)。。可以直接枚举上下左右边界,

坑点:matrix.size() == 0,或者 matrix[0].size() == 0 的情况

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        if(matrix.size() == 0 || matrix[0].size() == 0) return {};
        solve(matrix, 0, matrix[0].size() - 1, 0, matrix.size() - 1);
        return ans;
    }

    void solve(vector<vector<int>> &matrix, int lef, int rig, int top, int bot) {   // left, right, top, bottom
        if(lef > rig || top > bot) return ;
        if(lef == rig) {
            for(int i = top; i <= bot; ++ i) ans.emplace_back(matrix[i][lef]);
            return ;
        }
        if(top == bot) {
            for(int i = lef; i <= rig; ++ i) ans.emplace_back(matrix[top][i]);
            return ;
        }
        for(int i = lef; i <= rig; ++ i) ans.emplace_back(matrix[top][i]);
        for(int i = top + 1; i <= bot; ++ i) ans.emplace_back(matrix[i][rig]);
        for(int i = rig - 1; i >= lef; -- i) ans.emplace_back(matrix[bot][i]);
        for(int i = bot - 1; i > top; -- i) ans.emplace_back(matrix[i][lef]);
        solve(matrix, lef + 1, rig - 1, top + 1, bot - 1);
    }
    vector<int> ans;
};

 

上一篇:Python 30 天‍ - 第 23 天 - 网页抓取


下一篇:Python 30 天‍ - 第 23 天 - 网页抓取