day-27 代码随想录算法训练营(19)part03

78.子集

画图分析:

day-27 代码随想录算法训练营(19)part03_第1张图片

 思路:横向遍历,每次遍历的时候都进行一次添加,然后进行纵向递归,递归完之后进行回溯。
  • 注意:空集也是子集。

90.子集||

分析:和上题一样,区别在于有重复数字
思路:组合问题有重复都考虑先排序再操作!
class Solution {
public:
    vector>res;
    vectormid;
    void backtrace(vector&nums,int start){
        if(find(res.begin(),res.end(),mid)==res.end())//去重
            res.push_back(mid);
        if(start==nums.size())
            return;
        
        for(int i=start;i> subsetsWithDup(vector& nums) {
        sort(nums.begin(),nums.end());//需要排序
        backtrace(nums,0);
        return res;
    }
};

491.递增子序列

class Solution {
public:
    vector>midRes,res;
    vectormid;
    void backtrace(vector&nums,int start){
        if(mid.size()>=2 ){//条件限制
            midRes.push_back(mid);
        }
        if(start==nums.size())//终止条件
            return;
        unordered_set vistedSet;
        for(int i=start;inums[i])//递增条件
                continue;
            //judge[nums[i]]=true;
            vistedSet.insert(nums[i]);//遍历标记
            mid.push_back(nums[i]);
            backtrace(nums,i+1);
            mid.pop_back();//回溯
        }
    }
    vector> findSubsequences(vector& nums) {
        backtrace(nums,0);
        return midRes;
    }
};

46.全排列

思路:跟子集的代码几乎一样,主要区别在于
  • 每次遍历都从0开始,并且做树枝去重
class Solution {
public:
    vector>res;
    vectormid;
    void backtrace(vector&nums,int start){
        if(start==nums.size()){
            res.push_back(mid);
        }
        for(int i=0;i> permute(vector& nums) {
        backtrace(nums,0);
        return res;
    }
};

47.全排列||

思路一:使用哈希表进行树枝下标去重(因为有重复元素)
问题:在数组去重时时间复杂度过高
class Solution {
public:
    vector>res;
    vectormid;
    unordered_mapmap;
    void backtrace(vector&nums,int start){
        if(start==nums.size()){
            if(find(res.begin(),res.end(),mid)==res.end())//数组去重
                res.push_back(mid);
            return;
        }

        for(int i=0;i> permuteUnique(vector& nums) {
        //sort(nums.begin(),nums.end());
        backtrace(nums,0);
        return res;
    }
};

你可能感兴趣的:(算法学习,#,代码随想录算法训练营(19),C++,算法,数据结构,leetcode)