给定一个可能包含重复的整数的集合,S返回所有可能的子集。
来源:互联网 发布:国家电网网络大学登录 编辑:程序博客网 时间:2024/05/16 00:42
本题源自LeetCode
--------------------------------------------------------------------------------------
大神的回溯法思路:http://blog.csdn.net/versencoder/article/details/52071930
回溯法求解
1 传统的 内存超时:
vector<vector<int> > subsetsWithDup(vector<int> &S) { vector<vector<int>> result; sort(S.begin(),S.end()); vector<int> list; backTracing(S,0,result,list); return result; } void backTracing(vector<int>& num,int start,vector<vector<int>>& result,vector<int>& list){ result.push_back(list); for(int i=start;i<num.size();i++){ if(i>start&&num[i]==num[i-1]) continue; list.push_back(num[i]); backTracing(num,start+1,result,list); list.pop_back(); } }
2 内存小。
vector<vector<int>> res; vector<int> tmp; vector<vector<int> > subsetsWithDup(vector<int> &S) { sort(S.begin(),S.end()); dp(0,0,S); return res; } void dp(int start,int n,vector<int> &num){ if(tmp.size()==n){ res.push_back(tmp); if(n<num.size()) dp(start,n+1,num); else return ; } for(int i=start;i<num.size();i++){ if(i>start&&num[i]==num[i-1]) continue; tmp.push_back(num[i]); dp(i+1,n,num); tmp.pop_back(); } }
阅读全文
0 0
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
- 给定一组不同的整数,S返回所有可能的子集。
- 求一个集合所有可能的子集
- 给一个整数数组,输出所有可能的子集
- 给定不同数字的集合,返回所有可能的排列。
- 不包含重复元素的集合S,求其所有子集
- 返回某整数集合的所有子集
- 设S是有n个元素的集合,S的幂集是S所有可能的子集组成的集合。
- 生成一个整数集合的所有子集
- (用二进制的思路)给定一个集合S,打印出集合所有的子集
- 给定两个整数n和k,返回1 ... n中k个数的所有可能组合。
- java求子集和,给定数组求这个数组中某些数字相加等于某个值的所有可能集合
- 给定一个集合,输出它的所有子集
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 给定一个字符串,输出其所有的可能排列
- 打印所有可能的集合
- 一个集合的所有子集
- 磁盘管理之逻辑卷管理(Logical Volume Manager)
- 逆波兰计算器
- git入门(1)--提交代码的一般步骤
- 2.java创建线程的三种方式及其对比
- 使用Guava的RateLimiter类实现限速器
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- HTTP中PUT和POST的区别
- Android 6.0以上权限处理
- MAC同时通过有线和无线访问内外网的设置方法
- 原样输出html
- jquery chosen api
- 3.线程的状态转换
- [LeetCode]206. Reverse Linked List
- tensorboard的使用