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: ...
随机推荐
- poj2425--A Chess Game
题意:给定一棵有向图的树,有些节点上有石子,每次可以取一个石子向一个有向边移动,不能移动者负. Ans:树上nim,叶子节点nim为0,父亲节点递归儿子得到sg值,答案就是每个石子所在点的sg值异或和 ...
- mysql出现错误“ Every derived table must have its own alias”
Every derived table must have its own alias 这句话的意思是说每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时 ...
- js如何判断字符串是否进行过window.btoa()转码
window.btoa()是基于Base64算法的.window.btoa()只能将ASCII字符进行转码 因此我们需要了解Base64的原理及主要特征:Base64的原理在这里就不多说了,网上很多讲 ...
- poj 2251 Dungeon Master(bfs)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- 自定义checkbox样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Laravel-表单篇-controller
(慕课网_轻松学会Laravel-表单篇_天秤vs永恒老师_http://www.imooc.com/learn/699) Controller 1.Controller-Request //Requ ...
- leetcode:Minimum Path Sum(路线上元素和的最小值)【面试算法题】
题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ...
- 《javascript设计模式》读书笔记四(单例模式)
1.单利模式简单介绍 在<设计模式>中单利模式是一种比較简单的模式,定义例如以下: 确保某一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例. 在javascript中则将代码组 ...
- getInitParameter()
getInitParameter()方法是在GenericServlet接口中新定义的一个方法,用来调用初始化在web.xml中存放的参量.在web.xml配置文件中一个servlet中参量的初始 ...
- samba常用命令
1.# smbstatusSamba version 3.6.23PID Username Group Machine ---------------------------------------- ...