leetcode上回溯法的使用

17

93

131

46(全排列)

class Solution {
public:
    vector<vector<int>> permute(vector<int>& nums) {
        vector<vector<int>> res;
        permuteDFS(nums, 0, res);
        return res;
    }
    
    void permuteDFS(vector<int>& num, int start, vector<vector<int>>& res) {
        if (start >= num.size()) res.push_back(num);
        for (int i = start; i < num.size(); ++i) {
            swap(num[start], num[i]);
            permuteDFS(num, start + 1, res);
            swap(num[start], num[i]);
        }
    }
};

47

 77(组合,记得剪枝)

class Solution {
public:
    vector<vector<int>> res;
    
    void gencombination(int n,int k,int start,vector<int> &c)
    {
        if(c.size()==k){
            res.push_back(c);
            return;
        }
        
        for(int i=start;i<=n-(k-c.size())+1;i++){
            c.push_back(i);
            gencombination(n,k,i+1,c);
            c.pop_back();
        }
            
        return;
    }
    
    vector<vector<int>> combine(int n, int k) {
        res.clear();
        if(n<=0||k<=0||k>n)
            return res;
        
        vector<int> c;
        gencombination(n,k,1,c);
        return res;
    }
};

39

40

216

78

90

401

原文地址:https://www.cnblogs.com/darklights/p/11684576.html