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 ...
随机推荐
- SNMP学习笔记之SNMPWALK 安装与使用详解
0x00 简介 snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户.通过snmpwalk也可以查看支 ...
- C++微专业课程辅导(内存模型和动态内存)
“除了静态内存和栈内存之外,每个程序还拥有一个内存池.这部分空间被称作自由空间(free store)或堆(heap).程序用堆来存储动态分配(dynamically allocate)的对象”——& ...
- 20145304 网络对抗技术 逆向与Bof基础
20145304 网络对抗技术 逆向与Bof基础 实践目标 学习以下两种方法,运行正常情况下不会被运行的代码: 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的 ...
- vijos 1098 合唱队形 - 动态规划
描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…, ...
- 在awk中通过system调用sql语句来说明引号的使用
一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1). $ cat file ... ... ...
- 最大子段和SP1716GSS3 线段树
前言 spoj需要FQ注册,比较麻烦,大家就在luogu评测吧 题目大意: $n$ 个数,$q$ 次操作 操作$0 _ x_ y$把$A_x$ 修改为$y$ 操作$1 _ l _r$询问区间$[l, ...
- 分布式系统一致性协议--2PC,3PC
分布式系统中最重要的一块,一致性协议,其中就包括了大名鼎鼎的Paxos算法. 2PC与3PC 在分布式系统中,每一个机器节点虽然能够明确知道自己在进行事务操作过程中的结果是成功或是失败,但是却无法直接 ...
- [BZOJ2963][JLOI2011]飞行路线 分层图+spfa
Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...
- Java之Elasticsearch 增删改查
<!--ELK --> <dependency> <groupId>org.elasticsearch.client</groupId> <art ...
- shell 使用变量
使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名 ...