78. Subsets
2016-05-04 15:18
357 查看
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 =
is:
题目要求求一个集合的全部子集,并且每个子集的元素都是升序的。可以先把给定的数组排序然后用递归的方法得到全部子集。
代码:
class Solution {
public:
void backtracking(vector<int>nums,int idx,int n,vector<int>cur,vector<vector<int> >&res)
{
if(idx==n)
{
res.push_back(cur);
return;
}
backtracking(nums,idx+1,n,cur,res);
cur.push_back(nums[idx]);
backtracking(nums,idx+1,n,cur,res);
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res;
if(nums.empty()) return res;
int n=nums.size();
sort(nums.begin(),nums.end());
vector<int>cur;
backtracking(nums,0,n,cur,res);
return res;
}
};
也可以用非递归的方法:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res(1);
if(nums.empty()) return res;
int n=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<n;i++)
{
int m=res.size();
for(int j=0;j<m;j++)
{
res.push_back(res[j]);
res.back().push_back(nums[i]);
}
}
return res;
}
};
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], [] ]
题目要求求一个集合的全部子集,并且每个子集的元素都是升序的。可以先把给定的数组排序然后用递归的方法得到全部子集。
代码:
class Solution {
public:
void backtracking(vector<int>nums,int idx,int n,vector<int>cur,vector<vector<int> >&res)
{
if(idx==n)
{
res.push_back(cur);
return;
}
backtracking(nums,idx+1,n,cur,res);
cur.push_back(nums[idx]);
backtracking(nums,idx+1,n,cur,res);
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res;
if(nums.empty()) return res;
int n=nums.size();
sort(nums.begin(),nums.end());
vector<int>cur;
backtracking(nums,0,n,cur,res);
return res;
}
};
也可以用非递归的方法:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res(1);
if(nums.empty()) return res;
int n=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<n;i++)
{
int m=res.size();
for(int j=0;j<m;j++)
{
res.push_back(res[j]);
res.back().push_back(nums[i]);
}
}
return res;
}
};
相关文章推荐
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- javascript数组操作总结和属性、方法介绍
- mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
- JavaScript Array扩展实现代码
- JavaScript之数组(Array)详解
- Javascript实现Array和String互转换的方法
- C#中Array与ArrayList用法及转换的方法
- Array栈方法和队列方法的特点说明
- Array.prototype.slice 使用扩展
- Array, Array Constructor, for in loop, typeof, instanceOf
- 实例详解ECMAScript5中新增的Array方法
- Javascript数组Array基础介绍
- js Array的用法总结
- JavaScript 判断判断某个对象是Object还是一个Array
- Javascript中的Array数组对象详谈
- js模拟实现Array的sort方法
- 在javascript将NodeList作为Array数组处理的方法
- PHP array_multisort()函数的使用札记
- PHP中array_merge和array相加的区别分析
- Sorting Array Values in PHP(数组排序)