Subsets and Subsets II
2015-11-11 20:37
260 查看
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], [] ]
这道题很明显是用递归来求解,递归的方法是,对于每一个元素,有取和不取两种情况,对于添加的元素,在递归返回时还要去掉。注意初始数组要先排序。
class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> result; vector<int> path; sort(nums.begin(),nums.end()); find(nums,0,result,path); return result; } void find(vector<int> nums, int index, vector<vector<int>>& result, vector<int>& path){ if(index==nums.size()) result.push_back(path); else{ find(nums,index+1,result,path); path.push_back(nums[index]); find(nums,index+1,result,path); path.pop_back(); } } };
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>> result; vector<int> sub; sort(nums.begin(),nums.end()); find(0,nums,sub,result); sort(result.begin(),result.end()); result.erase( unique(result.begin(),result.end()), result.end()); return result; } void find(int index, vector<int>& nums, vector<int>& sub, vector<vector<int>>& result){ if(index<=nums.size()) result.push_back(sub); for(int i=index;i<nums.size();i++){ sub.push_back(nums[i]); find(i+1,nums,sub,result); sub.pop_back(); } } };
相关文章推荐
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- PHP递归创建多级目录
- Javascript递归打印Document层次关系实例分析
- oracle 使用递归的性能提示测试对比
- 使用curl递归下载软件脚本分享
- Perl脚本实现递归遍历目录下的文件
- JavaScript的递归之递归与循环示例介绍
- C# 递归查找树状目录实现方法
- 全排列算法的非递归实现与递归实现的方法(C++)
- php递归列出所有文件和目录的代码
- java递归菜单树转换成pojo对象
- 一个JavaScript递归实现反转数组字符串的实例
- Java中的递归详解(用递归实现99乘法表来讲解)
- C语言的递归思想实例分析