回溯都不会面试就是滚蛋三连!|刷题打卡

155 阅读1分钟

一、题目描述:

3[]4NVMW8FU2PH$$D~`OI)O.png

二、思路分析:

怎么回事?回溯也不难啊 这不就是当他是一个树,dfs遍历下就完事了吗?

  • 怎么确定哪个点用过,哪个点没用过?

通过bool 数组,那么每个方法都有一个布尔数组吗?,不用只需要一个,但是调用函数以后需要回退一样

回溯的精髓就是这个回退吧

我错了!欸我反悔了

  • res是只需要一个吗

对的,不能多个

  • path是只需要一个吗? 必不能够,那样你res.push_back(path)不就都一个值了?

  • 你为什么总是在问,需要一个还是每个方法各一个

这是让你去想各种语言的参数传递规则

三、AC 代码:

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        vector<bool> isused;
        int n = nums.size();
        int depth = 0;
        vector<int> path;
        for(int i = 0; i < nums.size(); i ++){
            isused.push_back(false);
        }
        dfs(nums, n, depth, path, isused, res);
        return res;
    }
    void dfs(vector<int>& nums, int len, int depth, vector<int> path, vector<bool>& used, vector<vector<int>>& res){
        if(len == depth){
            res.push_back(path);
            return ;
        }
        for(int i = 0; i < nums.size(); i++){
            if(!used[i]){
                // false 说明没人用过
                path.push_back(nums[i]);
                used[i] = true;
                dfs(nums, len, depth + 1, path, used, res);

                used[i] = false;
                path.pop_back();
            }
        }
        return;
    }
};

四、总结:

因为这题不会回溯,所以被问个TCP三次握手继承多态就到了喜闻乐见的你还有什么问题要问我吗 这个环节了

引以为耻,引以为戒

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情