leetcode -day31 Subsets I II
1、
Subsets
Given a set of distinct integers, S, 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 S = [1,2,3]
,
a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
分析:想到的方法是首先进行排序,从头到尾一次选择要不要该元素。能够递归实现。例如以下代码。
class Solution {
public:
vector<vector<int> >* v;
vector<vector<int> > subsets(vector<int> &S) { v = new vector<vector<int> >();
//先排序
sort(S.begin(),S.end()); vector<int> res;
generate(res, S, 0);
return *v;
}
//对每个元素有放与不放两种选择
void generate(vector<int> res, vector<int> &S, int i)
{
if(i == S.size())
{
v->push_back(res);
return;
}
else
{
generate(res, S, i+1);//不放当前元素
res.push_back(S[i]); //放入当前元素
generate(res, S, i+1);
}
}
};
2、Subsets II
Given a collection of integers that might contain duplicates, S, 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 S = [1,2,2]
,
a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
分析:此题和上题类似,就是有了反复元素,想法也是先进行排序,排序后,从头到尾遍历,记录每一个元素的个数,每一个子集中有0-i个指定元素(一共i个),代码例如以下:
class Solution {
public:
vector<vector<int> >* v;
vector<vector<int> > subsetsWithDup(vector<int> &S) { v = new vector<vector<int> >();
//先排序
sort(S.begin(),S.end()); vector<int> res;
generate(res, S, 0,0,0);
return *v;
}
//pre: 排序后前一个元素 num: 前一个元素出现的次数
void generate(vector<int> res, vector<int> &S, int i,int pre,int num)
{
if(i == S.size())
{
v->push_back(res);
for(int j=1; j<=num; ++j){
res.push_back(pre); //放入之前元素
v->push_back(res);
}
return;
}
else if(pre != S[i] || num < 1 ) //与之前元素不同或者是首次
{
if(num < 1){
generate(res,S,i+1,S[i],1);
}else{
generate(res, S, i+1,S[i],1);//放入0个元素
for(int j=1; j<=num; ++j){
res.push_back(pre);
generate(res, S, i+1,S[i],1);//放入i个元素后从当前位置開始
}
}
}else{
pre = S[i];
generate(res, S, i+1,pre,num+1);
}
}
};
版权声明:本文博客原创文章,博客,未经同意,不得转载。
leetcode -day31 Subsets I II的更多相关文章
- [LeetCode] 90.Subsets II tag: backtracking
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...
- [leetcode]90. Subsets II数组子集(有重)
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...
- Java for LeetCode 090 Subsets II
Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...
- [LeetCode] 90. Subsets II 子集合 II
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...
- LeetCode Single Number I / II / III
[1]LeetCode 136 Single Number 题意:奇数个数,其中除了一个数只出现一次外,其他数都是成对出现,比如1,2,2,3,3...,求出该单个数. 解法:容易想到异或的性质,两个 ...
- [array] leetcode - 40. Combination Sum II - Medium
leetcode - 40. Combination Sum II - Medium descrition Given a collection of candidate numbers (C) an ...
- LeetCode 137. Single Number II(只出现一次的数字 II)
LeetCode 137. Single Number II(只出现一次的数字 II)
- LeetCode:路径总和II【113】
LeetCode:路径总和II[113] 题目描述 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例:给定如下二叉树, ...
- LeetCode:组合总数II【40】
LeetCode:组合总数II[40] 题目描述 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candi ...
随机推荐
- android L新控件RecyclerView具体解释DeMo
简介 在谷歌的官方网站上,我们可以看到,它是此演示文稿:RecyclerView is a more advanced and flexible version of ListView. This w ...
- 汉字Collection
只是上一行Demo private static string[] HanZis = new string[]{ "啊阿呵吖嗄腌锕爱矮挨哎碍癌艾唉哀蔼隘埃皑呆嗌嫒瑷暧捱砹嗳锿霭按安暗岸俺案鞍 ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)(转)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
- 小说mvvm
与多样化和复杂的前,设计模式不再是后端专有名词.从最初的面向对象的,框架制定了到现在为止mvc等一下,今天,它主要是关于Model-View-ViewModel(MVVM). 对于mvc大家可能都会相 ...
- sql推断时间
SELECT * FROM msg_personchat_t WHERE send_userid='28' AND critime>'2014-03-30' AND critime<'20 ...
- 在win7在结构cocos2d-x v3.2rc0开发环境(For Android)
cocos2d-x 这是现在比较流行的游戏引擎., 因此.本文的目的在于教导新手怎样在win7下建立cocos2dx开发环境, 截止本文,cocos2dx的最新版本号为 v3.2rc0版,我将如果您的 ...
- .NET反编译之Reflector
.NET反编译之Reflector 这几日由于公司需要, 看了些.NET反编译技巧,特地和大家分享下 .NET反编译工具很多,Reflector是其中一个很优秀的工具,所以就用它来进行反编译工作了.今 ...
- 关于cocos2dx导入安卓项目至eclipse的诸多问题
看视频实在是有点蛋疼,尽管我也想在苹果上做,可是奈何自己是一个小屌丝,根本买不起高富帅的装备.所以仅仅能硬着头皮去处理win以下的问题. 在把用C++语言编写的cocos2dx项目编译编译完毕之后,导 ...
- ssh无密码登陆(转)
[0]写在前面 由于ssh 实现的是免密码登陆,大致步骤是: 0.1) client通过ssh登陆到server: 0.2) server检查家目录下的.ssh文件, 并发送公钥文件 authoriz ...
- a^b%c 的三种形式
求a^b%c,(1 <= a,b <= 2^62, 1 <= c <= 10^9) 最主要的高速幂 _LL mod_exp(_LL a, _LL b, int c) { _L ...