78. Subsets 90. Subsets II
1.
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],
[]
] 1.递归
class Solution {
public:
void getSubsets(vector<vector<int>> &res, vector<int> nums, vector<int> v, int n, int m, int k, int idx)
{
if(k == m)
{
res.push_back(v);
v.clear();
return;
}
for(int i = idx; i < n; i++)
{
v.push_back(nums[i]);
getSubsets(res, nums, v, n, m, k+, i+);
v.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> v;
res.push_back(v);
int n = nums.size(), i;
if( == n)
return res;
sort(nums.begin(), nums.end());
for(i = ; i <= n; i++)
{
getSubsets(res, nums, v, n, i, , );
}
return res;
}
};
2.非递归
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> v;
res.push_back(v);
int n = nums.size(), l, i, j;
if( == n)
return res;
sort(nums.begin(), nums.end());
for(i = ; i < n; i++)
{
l = res.size();
for(j = ; j < l; j++)
{
v = res[j];
v.push_back(nums[i]);
res.push_back(v);
}
}
return res;
}
};
class Solution {
public:
void getSubsets(vector<vector<int>> &res, vector<int> nums, int n, int m)
{
vector<int> d;
int i, j;
for(i = ; i < n; i++)
{
d.push_back((i < m) ? : );
}
while()
{
vector<int> v;
for(i = ; i < n; i++)
{
if(d[i])
v.push_back(nums[i]);
}
res.push_back(v);
//find [1, 0] pattern
bool found = false;
int ones = ;
for(i = ; i < n-; i++)
{
if( == d[i] && == d[i+])
{
d[i] = ;
d[i+] = ;
found = true;
for(j = ; j < i; j++)
{
d[j] = (ones > ) ? : ;
ones--;
}
break;
}
if( == d[i])
ones++;
}
if(!found)
break;
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> v;
res.push_back(v);
int n = nums.size(), i;
if( == n)
return res;
sort(nums.begin(), nums.end());
for(i = ; i <= n; i++)
{
getSubsets(res, nums, n, i);
}
return res;
}
};
2.
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],
[]
]
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>> res;
vector<int> v;
res.push_back(v);
int n = nums.size(), l1, l2, i, j;
if( == n)
return res;
sort(nums.begin(), nums.end());
for(i = ; i < n; i++)
{
l1 = res.size();
for(j = ; j < l1; j++)
{
v = res[j];
v.push_back(nums[i]);
res.push_back(v);
}
while(i+ < n && nums[i] == nums[i+])
{
l2 = res.size();
for(j = l2-l1; j < l2; j++)
{
v = res[j];
v.push_back(nums[i]);
res.push_back(v);
}
i++;
}
}
return res;
}
};
class Solution {
public:
void getSubsets(vector<vector<int>> &res, vector<int> nums, vector<int> v, int n, int m, int k, int idx)
{
if(k == m)
{
res.push_back(v);
v.clear();
return;
}
for(int i = idx; i < n; )
{
v.push_back(nums[i]);
getSubsets(res, nums, v, n, m, k+, i+);
v.pop_back();
i++;
while(i < n && nums[i] == nums[i-])
i++;
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>> res;
vector<int> v;
res.push_back(v);
int n = nums.size(), i;
if( == n)
return res;
sort(nums.begin(), nums.end());
for(i = ; i <= n; i++)
getSubsets(res, nums, v, n, i, , );
return res;
}
};
78. Subsets 90. Subsets II的更多相关文章
- leetcode 78. Subsets 、90. Subsets II
第一题是输入数组的数值不相同,第二题是输入数组的数值有相同的值,第二题在第一题的基础上需要过滤掉那些相同的数值. level代表的是需要进行选择的数值的位置. 78. Subsets 错误解法: cl ...
- Leetcode之回溯法专题-90. 子集 II(Subsets II)
Leetcode之回溯法专题-90. 子集 II(Subsets II) 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入 ...
- 【LeetCode】90.Subsets II
Subsets II Given a collection of integers that might contain duplicates, nums, return all possible s ...
- LeetCode Problem 90. Subsets II
python solution 123456789101112131415161718192021222324252627 class (object): def subsetsWithDup(sel ...
- Leetcode之回溯法专题-78. 子集(Subsets)
Leetcode之回溯法专题-78. 子集(Subsets) 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = ...
- [leetcode] 90. 子集 II.md
90. 子集 II 78. 子集题的扩展,其中的元素可能会出现重复了 我们仍沿用78题的代码,稍作改动即可: 此时需要对nums先排个序,方便我们后面跳过选取相同的子集. 跳过选取相同的子集.当选取完 ...
- 90. 子集 II
90. 子集 II 题意 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2]输出:[ [2], [1], ...
- Java实现 LeetCode 90 子集 II(二)
90. 子集 II 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: [ [2], [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 ...
随机推荐
- Linux系统的vi命令
Linux系统的vi命令 vi编辑命令 1,格式: #vi filename 2,用法: //打开或新建文件,并将光标置于第一行首 #vi + filename //打开文件,并将光标置于第n行首 # ...
- 20145106java实验四
实验名称:Java网络编程 实验内容: 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145109竺文君 博客地址: 在本次实验中,是以我作为服务 ...
- Android实践项目汇报总结(下)
微博客户端的设计与实现(下) 第四章 系统详细功能实现 本应用实现了如下主要模块:程序启动模块.登录授权模块.主界面显示模块撰写发表微博模块.用户发布信息模块.软件设置模块. 4.1程序启动模块实现 ...
- JavaScript:正则表达式 分组
在现在的我看来,带小挂号的就是分组,嗯. 代码: var reg=/(abc)/; var str="abcdabcdeabcdef"; console.dir(reg.exec( ...
- The way to Go(7): 常量
Reference: Github: Go Github: The way to Go 常量 常量使用关键字 const 定义,用于存储不会改变的数据. const identifier [type] ...
- 【Coursera】Security Introduction -Ninth Week(2)
对于公钥系统,我们现在已经有了保证它 Confidentially 的一种方法:SSL.SSL利用了公钥的概念. 那么 who we are talking to? Integrity Certifi ...
- ns-3 NetAnim遇到了一个问题
安装好了 NetAnim 之后,使用NS3原有例子 third.cc ,在 Simulator::run() 前面添加如下语句: AnimationInterface anim("third ...
- HDU 1711 Number Sequence(KMP模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. #include<iostream> #include<cs ...
- 【Python】【数据类型】
[序列更新&散列&切片]"""from array import arrayimport reprlibarray1 = array('d',(1,2,3 ...
- hdu 1269 迷宫城堡 最简单的联通图题 kosaraju缩点算法
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Des ...