第一题是输入数组的数值不相同,第二题是输入数组的数值有相同的值,第二题在第一题的基础上需要过滤掉那些相同的数值。

level代表的是需要进行选择的数值的位置。

78. Subsets

错误解法:

class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> > result;
if(nums.empty())
return result;
vector<int> res;
int level = ;
subsets(nums,result,res,level);
return result;
}
void subsets(vector<int>& nums,vector<vector<int> >& result,vector<int>& res,int level){
result.push_back(res);
for(int i = level;i < nums.size();i++){
res.push_back(nums[i]);
subsets(nums,result,res,level+);
res.pop_back();
}
return;
}
};

如果只看代码本身,不看继续的递归,整个for循环执行完成是同一层的所有节点。

level是同一层初始的开始,对于同一层来说是一个固定值。

正确解法:

时间复杂度2的n次方*n

class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> > result;
if(nums.empty())
return result;
vector<int> res;
int level = ;
subsets(nums,result,res,level);
return result;
}
void subsets(vector<int>& nums,vector<vector<int> >& result,vector<int>& res,int level){
result.push_back(res);
for(int i = level;i < nums.size();i++){
res.push_back(nums[i]);
subsets(nums,result,res,i+);
res.pop_back();
}
return;
}
};

错误解法:

如果是[1,2,3]这个数组,输出的结果不会包含任何一个含有3的子数组

subset的题目必须将每个搜索的节点存储,这个代码每次是在下一个迭代中(即i+1)将上一次的结果进行存储,所以当level=2时把3存入res时,只有在level = 3时才会将这个搜索存入result。

修改的办法要么是直接删除if判断,要么是在if判断中加入result.push_back(res);

class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> result;
if(nums.empty())
return result;
vector<int> res;
int level = ;
subsets(nums,result,res,level);
return result;
}
void subsets(vector<int> nums,vector<vector<int>>& result,vector<int> res,int level){
if(level == nums.size()){
return;
}
result.push_back(res);
for(int i = level;i < nums.size();i++){
res.push_back(nums[i]);
subsets(nums,result,res,i+);
res.pop_back();
}
}
};

90. Subsets II

先用sort排序,是为了利用相同数值紧邻。

在整个过程中,在回溯回来的过程中,才会考虑相同的数值跳过。

从搜索树来看,实际上只在同一层进行相同数值判断,而每一层的节点都是通过回溯得到的。错误的解法是在每一个节点都进行判断。

错误解法:

class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int> > result;
if(nums.empty())
return result;
vector<int> res;
int level;
sort(nums.begin(),nums.end());
subsets(nums,result,res,level);
return result;
}
void subsets(vector<int>& nums,vector<vector<int> >& result,vector<int>& res,int level){
result.push_back(res);
for(int i = level;i < nums.size();i++){
if(i > && nums[i] == nums[i-])
continue;
res.push_back(nums[i]);
subsets(nums,result,res,i+);
res.pop_back();
}
return;
}
};

正确解法:

class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int> > result;
if(nums.empty())
return result;
vector<int> res;
int level = ;
sort(nums.begin(),nums.end());
subsets(nums,result,res,level);
return result;
}
void subsets(vector<int>& nums,vector<vector<int> >& result,vector<int>& res,int level){
result.push_back(res);
for(int i = level;i < nums.size();i++){
res.push_back(nums[i]);
subsets(nums,result,res,i+);
res.pop_back();
while(i < nums.size() - && nums[i+] == nums[i])
i++;
}
return;
}
};

leetcode 78. Subsets 、90. Subsets II的更多相关文章

  1. 78. Subsets(M) & 90. Subsets II(M) & 131. Palindrome Partitioning

    78. Subsets Given a set of distinct integers, nums, return all possible subsets. Note: The solution ...

  2. leetcode 51. N-Queens 、52. N-Queens II

    51. N-Queens 使用isValid判断当前的位置是否合法 每次遍历一行,使用queenCol记录之前行的存储位置,一方面是用于判断合法,另一方面可以根据存储结果输出最终的结果 class S ...

  3. Leetcode之回溯法专题-90. 子集 II(Subsets II)

    Leetcode之回溯法专题-90. 子集 II(Subsets II) 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入 ...

  4. [LeetCode] 90.Subsets II tag: backtracking

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  5. [leetcode]90. Subsets II数组子集(有重)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  6. [LeetCode] 90. Subsets II 子集合 II

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  7. LeetCode Problem 90. Subsets II

    python solution 123456789101112131415161718192021222324252627 class (object): def subsetsWithDup(sel ...

  8. 【LeetCode】90.Subsets II

    Subsets II Given a collection of integers that might contain duplicates, nums, return all possible s ...

  9. LeetCode 78. 子集(Subsets) 34

    78. 子集 78. Subsets 题目描述 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明: 解集不能包含重复的子集. 每日一算法2019/6/6Day 34L ...

随机推荐

  1. sqlserver - FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  2. 十三、nginx 强制下载txt等文件

    当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件. 那么使用nginx做资源服务器的时候,如何强制下载文件呢? location /back/upload/ ...

  3. 跨域解决方案之HTML5 postMessage

    问题场景: web是嵌入到手机客户端中的静态页面,为了统计用户行为需要引入ga,但是ga必须是在www下才行,哪怕是localhost,这就是矛盾.解决方案是在页面中使用iframe,iframe是在 ...

  4. html+css 布局篇

    float 做了float后有一些不好的影响. 1.背景不能显示 由于浮动产生,如果对父级设置了(CSS background背景)CSS背景颜色或CSS背景图片,而父级不能被撑开,所以导致CSS背景 ...

  5. [转]webapi部署在IIS7.5报404的解决方案

    1.iis 目录权限设置 2.转自:http://www.cnblogs.com/youlies/p/6042169.html 在web.config添加如下节点 <system.webServ ...

  6. Unity --- 关节组件

    一.简介 Unity提供了下面的关节组件:铰链关节(Hinge Joint).固定关节(Fixed Joint).弹簧关节(Spring Joint).角色关节(Character Joint).可配 ...

  7. awk日志分析

    前言 今天我们来讲讲如何用awk进行网站日志分析,得到页面平均耗时排行 文件 [xingxing.dxx@30_28_6_20 ~]$ cat logs /Oct/::: +] GET /pages/ ...

  8. java音频播放器

    java音频播放器备份,支持wav,mp3 都是摘抄于网络,wav播放,mp3播放 播放wav版本 包: 不需要其他jar包 代码: package com; import javax.sound.s ...

  9. Visio中锁定元件

    若要进行形状保护,需要能看到“开发工具”选项卡.默认情况下,该选项卡是隐藏的. 查看“开发工具”选项卡 单击“文件”选项卡. 单击“选项”. 单击“高级”,然后向下滚动到“常规”部分. 选择“以开发人 ...

  10. Linux ->> UBuntu 14.04 LTE下设置静态IP地址

    UBuntu 14.04 LTE设置IP地址和一些服务器版本的Linux还不太一样.以Centos 7.0为例,网卡IP地址的配置文件应该是/etc/sysconfig/network-scripts ...