LeetCode_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],
[]
]
DFS 的简单应用 : 求组合
class Solution {
public:
void DFS(vector<int> &S, vector<int> &temp,int n, int size,int start)
{
if(n == size)
{
result.push_back(temp);
return ;
}
if(n > size)
return ;
for(int i = start; i< len ;i++)
{
if(flag[i] == false)
{
flag[i] = true;
temp.push_back(S[i]);
DFS(S, temp, n+, size,i+);
temp.pop_back();
flag[i] = false;
}
}
}
vector<vector<int> > subsets(vector<int> &S) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
result.clear();
len = S.size();
flag.resize(len,false);
vector<int> temp;
result.push_back(temp) ;
sort(S.begin(), S.end());
for(int i = ; i <= len ; i++)
DFS(S, temp,, i,);
return result;
}
private:
vector<vector<int> > result ;
vector<bool> flag;
int len;
};
解释下start,因为组合和排列不同,组合不考虑排序,所以必须给元素进入temp指定一个次序,这个规则定义就是通过start,这样保证temp是有序的,也就保证result中没有重复
重写后的代码:
class Solution {
public:
void DFS(vector<int> &S, int currentSize, int length, int currentPos, vector<int> &ans)
{
if(length == currentSize){
res.push_back(ans);
return;
}
for(int i = currentPos; i < S.size(); i++)
{
ans.push_back(S[i]);
DFS(S, currentSize, length + , i+, ans);
ans.pop_back();
}
}
vector<vector<int> > subsets(vector<int> &S) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(S.begin(), S.end());
res.clear();
vector<int> empt;
res.push_back(empt);
for(int i = ; i <= S.size(); i++)
{
vector<int> ans;
DFS(S, i, , , ans);
}
return res;
}
private:
vector<vector<int>> res;
};
LeetCode_Subsets的更多相关文章
- LeetCode_Subsets II
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
随机推荐
- 虚拟ip配置
虚 拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址.数据包被发送到这个VIP地址,但是所有的数据还是经过真实的网络接口. VIPs大部分用于连接冗余:一个 ...
- NOI2012 魔幻棋盘
http://www.lydsy.com/JudgeOnline/problem.php?id=2877 二维线段树. 好恶...... B类数据: 棋盘是一维的. 我们有一个结论: $gcd(a_{ ...
- 找出最小的k个数
•已知数组中的n个正数,找出其中最小的k个数. •例如(4.5.1.6.2.7.3.8),k=4,则最小的4个数是1,2,3,4 •要求: –高效: –分析时空效率 •扩展:能否设计出适合在海量数据中 ...
- 齐B小短裙
女模周蕊微博引关注 火了齐B小短裙毁了干爹[图]_网易新闻中心 齐B小短裙
- LeetCode 191. Number of 1 Bits Question
题意:给你一个整数,计算该整数的二进制形式里有多少个“1”.比如6(110),就有2个“1”. 一开始我就把数字n不断右移,然后判定最右位是否为1,是就cnt++,否则就继续右移直到n为0. 可是题目 ...
- Java学习之Iterator(迭代器)的一般用法
迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为“轻量级”对象,因为创建它的代价小. Java中的I ...
- 关于背景透明,文字不透明的最佳方法,兼容IE
以背景黑色,透明度0.5举例 非IE:background:rgba(0,0,0,0.5); IE:filter:progid:DXImageTransform.Microsoft.gradient( ...
- UVA 10198 Counting
Counting The Problem Gustavo knows how to count, but he is now learning how write numbers. As he is ...
- phoneGap开发环境搭建(android)
1. 首先安装nodejs (http://nodejs.org/) 2. 然后在命令行输入 npm 回车 假设出现下图: 则表示成功安装 3. 安装 npm install -g cordov ...
- JavaLearning:JAVA IO Piped流
package org.fun.io; import java.io.IOException; import java.io.PipedInputStream; import java.io.Pipe ...