<LeetCode OJ> 78 / 90 Subsets (I / II)
Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3], a solution
is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
分析:
的题目意思基本一样,主要差别在于还须要对不同的len的子数组进行回溯,所以回溯法终于确定答案的方式不一样。
(本题是用len作为回溯时确定答案的根据)
class Solution {
public:
void dfs(vector<int>& nums, vector<int> &subres, int start, int len)//使用引用,有利于防止内存大爆炸
{
if (subres.size() == len)//已经获得答案。而且回溯
{
result.push_back(subres);
return;//回溯
}
for (int i = start; i < nsize; i++)
{
subres.push_back(nums[i]);
dfs(nums, subres, i + 1, len);
subres.pop_back(); // 完毕一个解后去掉末尾元素 ,准备下一次回溯寻找答案
}
}
vector<vector<int>> subsets(vector<int>& nums) {
nsize=nums.size();
if ( nsize == 0)
return result;
sort(nums.begin(),nums.end()); //一,先排序
vector<int> subres;
for(int len=0; len<=nums.size() ;len++)//二,对不同长度的子数组进行回溯
dfs(nums, subres, 0, len);
return result;
}
private:
vector<vector<int > > result;
int nsize;
};
Submissions: 208285 Difficulty: Medium
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution
is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
分析:
比上面的代码多加入一个同样组合不要的回溯条件就可以,只是代码的速度尽然打败了0.89%,也就是说极慢的速度。感觉不会再爱了。
class Solution {
public:
void dfs(vector<int>& nums, vector<int> &subres, int start, int len)//使用引用,有利于防止内存大爆炸
{
if (subres.size() == len)//已经获得答案。而且回溯
{
if(!isSameVec(subres)) //已经出现过的组合不要。
result.push_back(subres);
return;//回溯
}
for (int i = start; i < nsize; i++)
{
subres.push_back(nums[i]);
dfs(nums, subres, i + 1, len);
subres.pop_back(); // 完毕一个解后去掉末尾元素 。准备下一次回溯寻找答案
}
}
bool isSameVec(vector<int> &sub)
{
for(int i=0;i<result.size();i++)
{
if(result[i]==sub)
return true;
}
return false;
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
nsize=nums.size();
if ( nsize == 0)
return result;
sort(nums.begin(),nums.end()); //一,先排序
vector<int> subres;
for(int len=0; len<=nums.size() ;len++)//二,对不同长度的子数组进行回溯
dfs(nums, subres, 0, len);
return result;
}
private:
vector<vector<int > > result;
int nsize;
};
学习别人的算法:
class Solution {
public:
void dfs(vector<int> &s, int index, vector<int> &subset, vector<vector<int>> &res)
{
res.push_back(subset);
for(int i = index; i< s.size(); i++)
{
if(i!=index && s[i]==s[i-1])
continue;
subset.push_back(s[i]);
dfs(s,i+1,subset,res);
subset.pop_back();
}
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
// Note: The Solution object is instantiated only once.
vector<vector<int>> result;
sort(S.begin(),S.end());
vector<int> subset;
dfs(S,0,subset,result);
return result;
}
};
注:本博文为EbowTang原创,兴许可能继续更新本文。假设转载。请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50844984
原作者博客:http://blog.csdn.net/ebowtang
本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895
<LeetCode OJ> 78 / 90 Subsets (I / II)的更多相关文章
- LeetCode OJ 95. Unique Binary Search Trees II
Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...
- LeetCode OJ Remove Duplicates from Sorted Array II
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...
- LeetCode OJ:Search a 2D Matrix II(搜寻二维矩阵)
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- LeetCode OJ :Unique Binary Search Trees II(唯一二叉搜索树)
题目如下所示:返回的结果是一个Node的Vector: Given n, generate all structurally unique BST's (binary search trees) th ...
- leetcode 78. Subsets 、90. Subsets II
第一题是输入数组的数值不相同,第二题是输入数组的数值有相同的值,第二题在第一题的基础上需要过滤掉那些相同的数值. level代表的是需要进行选择的数值的位置. 78. Subsets 错误解法: cl ...
- LeetCode Problem 90. Subsets II
python solution 123456789101112131415161718192021222324252627 class (object): def subsetsWithDup(sel ...
- LeetCode OJ 题解
博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...
- LeetCode OJ:Integer to Roman(转换整数到罗马字符)
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- 【LeetCode OJ】Interleaving String
Problem Link: http://oj.leetcode.com/problems/interleaving-string/ Given s1, s2, s3, find whether s3 ...
随机推荐
- Codeforces Beta Round #9 (Div. 2 Only) B. Running Student 水题
B. Running Student 题目连接: http://www.codeforces.com/contest/9/problem/B Description And again a misfo ...
- 为什么MyISAM会比Innodb的查询速度快
INNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多: 1)数据块,INNODB要缓存,MYISAM只缓存索引块, 这中间还有换进换出的减少: 2)innodb寻址要映射到块,再 ...
- HDU 4681 String(2013多校8 1006题 DP)
String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- 数论E - Biorhythms(中国剩余定理,一水)
E - Biorhythms Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Subm ...
- 【ASP】Window2008站点安全设置,IIS7/IIS7.5中目录执行权限的设置方法
最近帮一个朋友管理Window 2008服务器,发现有个站点是用asp写的,更可怕的是还有传说中的“上传漏洞”,在上传文件夹中有好多的可执行的asp.php文件,算是shell后门脚本吧.怎么处理这个 ...
- Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行
Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行 Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执 ...
- Ext Connection
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- weblogic打补丁,bsu方法
刚装了10.3.6版本的weblogic,想把版本补丁到10.3.6.0.12 我用的系统是windows 8.1 ,呵呵 查看版本 执行java weblogic.version WebLogic ...
- python笔记17-字典如何按value排序
前言 面试题:如何统计数组中出现次数最多的数据,按出现次数由大到小排序 这个排序看似简单,涉及到的基础知识点还是很多的,真正写起来并不容易 备注:本篇是以python3.6讲解的,python2会多一 ...
- 仿LOL项目开发第三天
仿LOL项目开发第二天 by草帽 昨个我们已经实现了下载功能,但是发现没有,下载的包是压缩的,没有解压开,那么Unity是识别不了的. 所以今个我们来讲讲如何实现解压文件. 还记得吗,我们在Downl ...