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 ...
随机推荐
- 配置redis, make的时候: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
今天正在centos7.3里面配置redis3.0, 结果make的时候抛出编译中断 CC adlist.o In file included from adlist.c:34:0: zmalloc. ...
- Ubuntu18.04安装Openssl-1.1.1
1.查看版本 Ubuntu的版本是18.04.使用openssl version命令查看openssl版本,可以看到Ubuntu自带了openssl-1.1.0版本,因此安装新版本需要替换旧版本. 2 ...
- np.random.normal()正态分布
高斯分布的概率密度函数 numpy中 numpy.random.normal(loc=0.0, scale=1.0, size=None) 参数的意义为: loc:float 概率分布的均值,对应着整 ...
- scp命令在linux间传送文件的方法
当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码. 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 ...
- 文件查找:locate、find
文件查找:在文件系统上查找符合条件的文件: locate, find 非实时查找(数据库查找):locate //不是遍历系统文件,把当前系统目录下的所有文件抽取出来制作成一个索引(或者叫数据库), ...
- UVa 11039 设计建筑物
https://vjudge.net/problem/UVA-11039 题意: 有n个绝对值各不相同的非0整数,选出尽量多的数,排成一个序列,使得正负号交替且绝对值递增. 思路:正数存一个数组,负数 ...
- C# 窗口模拟点击按钮或关闭窗口
public class CloseForm { [DllImport("user32", EntryPoint = "FindWindow")] privat ...
- Cocos2d-x学习笔记(五)调度
在init方法中增加下边的代码,建议使用schedule函数,而不是scheduleUpdate函数,因为,后者默认是调用update函数,在如果有多个函数需要调度时,不是很灵活. auto labe ...
- python 判断字符串是否以数字结尾
import re def end_num(string): #以一个数字结尾字符串 text = re.compile(r".*[0-9]$") if text.match(st ...
- shell wc命令 统计行数
users文件内容 hello world 我们要统计 users 文件的行数,执行以下命令: $ wc -l users users 也可以将输入重定向到 users 文件: $ wc -l < ...