LeetCode 90. 子集 II(回溯+剪枝)
发布日期:2021-07-01 03:13:46
浏览次数:2
分类:技术文章
本文共 1393 字,大约阅读时间需要 4 分钟。
文章目录
1. 题目信息
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2. 解题
类似题目
2.1 循环
参考别人的,比较难想出来。
class Solution { public: vector> subsetsWithDup(vector & nums) { vector sub; vector > ans; ans.push_back({ }); sort(nums.begin(), nums.end()); int i, j, left = 0, right; for(i = 0; i < nums.size(); ++i) { if(i != 0 && (nums[i-1] != nums[i])) left = 0; right = ans.size(); for(j = left; j < right; ++j) { sub = ans[j]; sub.push_back(nums[i]); ans.push_back(sub); } left = ans.size()-(right-left); } return ans; }};
2.2 回溯
class Solution { public: vector> subsetsWithDup(vector & nums) { sort(nums.begin(), nums.end()); vector sub; vector > ans; ans.push_back({ }); bt(nums,sub,ans,0); return ans; } void bt(vector & nums,vector sub, vector > &ans, int i) { for(int idx = i; idx < nums.size(); ++idx) { if(idx > i && nums[idx] == nums[idx-1]) continue; sub.push_back(nums[idx]); ans.push_back(sub); bt(nums,sub,ans,idx+1); sub.pop_back(); } }};
转载地址:https://michael.blog.csdn.net/article/details/100167394 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月10日 16时12分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
单例模式(Singleton)
2019-05-02
ucOS 时钟中断(ISR)
2019-05-02
android Activity之间跳转。
2019-05-02
android Handler解析
2019-05-02
解决 emulator-5554 disconnected
2019-05-02
Android之Activity生命周期
2019-05-02
Android之AIDL使用解析
2019-05-02
REBOL编码解析
2019-05-02
java synchronized详解
2019-05-02
android之Http使用简介
2019-05-02
访问者模式讨论篇:java的动态绑定与双分派
2019-05-02
GreenDao学习笔记——初始化和增删改查
2019-05-02
asp.net core 学习资料整理
2019-05-02
ASP.NET CORE使用控制台程序调试web应用
2019-05-02
debian 有用的源
2019-05-02
正则表达式匹配任意字符
2019-05-02
Debian8 安装 ffmpeg,亲测有效
2019-05-02
Linux 安装 .NET Core 1.0 SDK
2019-05-02