leetcode日记(77)子集Ⅱ

不知道为什么看到这道题就很头痛......

其实只要掌握nums不包含重复元素的情况下的代码就行了。

若nums不能包含重复元素,那么使用回溯很容易就能写出来:

cpp 复制代码
class Solution {
    void hs(vector<int> v,int x,vector<int> r,vector<vector<int>>& result){
        if(x==v.size()){
            result.push_back(r);
            r.clear();
            return ;
        }
        r.push_back(v[x]);
        hs(v,x+1,r,result);
        r.pop_back();
        hs(v,x+1,r,result);
    }
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<int> r;
        vector<vector<int>> result;
        hs(nums,0,r,result);
        return result;
    }
};

一开始我在回溯的函数里鬼使神差写了一个循环导致结果多出一大堆......以后可千万不能犯这样的低级错误了............

接着就是考虑nums中能有重复元素的情况,这种情况下若重复元素上一个相同元素没有选上,那么以后的这个元素也不能选,知道这个原理就可以将nums排序,让重复元素互相挨着,每次不选上一个元素,若下一个元素还是这个元素就跳过不取。

cpp 复制代码
class Solution {
    void hs(vector<int> v,int x,vector<int> r,vector<vector<int>>& result){
        if(x==v.size()){
            result.push_back(r);
            r.clear();
            return ;
        }
        r.push_back(v[x]);
        hs(v,x+1,r,result);
        r.pop_back();
        for(int i=x;i<v.size()-1;i++){
            if(v[x]==v[x+1]) x++;
        }
        hs(v,x+1,r,result);
    }
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<int> r;
        vector<vector<int>> result;
        sort(nums.begin(),nums.end());
        hs(nums,0,r,result);
        return result;
    }
};
相关推荐
元亓亓亓9 分钟前
LeetCode热题100--230. 二叉搜索树中第 K 小的元素--中等
算法·leetcode·职场和发展
草莓熊Lotso9 分钟前
《算法闯关指南:优选算法-双指针》--01移动零,02复写零
c语言·c++·经验分享·算法·leetcode
焜昱错眩..1 小时前
代码随想录算法训练营第三十九天|62.不同路径 63.不同路径ll
算法
焦耳加热5 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
wan5555cn5 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6065 小时前
常用排序算法核心知识点梳理
算法·排序
蒋星熠7 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小欣加油8 小时前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream8 小时前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL8 小时前
【c++】c++第一课:命名空间
数据结构·c++·算法