LintCode 18-带重复元素的子集 JAVA
来源:互联网 发布:java开发单元测试 编辑:程序博客网 时间:2024/04/30 03:36
本人电子系,只为一学生。心喜计算机,小编以怡情。
带重复元素的子集
给定一个可能具有重复数字的列表,返回其所有可能的子集
注意事项
子集中的每个元素都是非降序的
两个子集间的顺序是无关紧要的
解集中不能包含重复子集
样例
如果 S = [1,2,2],一个可能的答案为:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
思路:递归法
自己定义了位置参数currentposition
缺点:递归参数应该可以减少。。吧?
static public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] nums) { //定义了两个List ArrayList<Integer> str=new ArrayList<>(); List<ArrayList<Integer>> ret=new ArrayList<>(); //获取数组长度 int n=nums.length; //添加[],我递归程序不考虑[],因此在这里处理 ret.add(new ArrayList<Integer>()); //考虑特殊情况-空数组 if(nums.length==0) return (ArrayList<ArrayList<Integer>>) ret; //对数组排序,因为题目要求是升序 Arrays.sort(nums); //调用递归 //(第一层,共n层,返回ret,临时ArrayList,0号位置开始) recursion(1,n,ret,str,nums,0); return (ArrayList<ArrayList<Integer>>) ret; } static void recursion(int k,int n,List<ArrayList<Integer>> ret,ArrayList<Integer> str,int nums[],int currentposition) { if(k>n)//退出条件 return; else { for(int i=0;i<nums.length;i++) { int candidate=nums[i];//取一个候选解 if(i>currentposition||k==1)//满足候选解在后面或者是第一层元素时 { str.add(candidate);//临时ArrayList添加候选解 if(!ret.contains(str))//如果ret不包含 { ret.add(new ArrayList<>(str));//添加,注意这里要new一个新的 } //递归 recursion(k+1, n, ret, str, nums,i); //撤销候选解,进行其他的尝试 str.remove(str.size()-1); } } } }
0 0
- lintcode-带重复元素的子集-18
- LintCode 18 带重复元素的子集
- lintcode(18)带重复元素的子集
- LintCode 18-带重复元素的子集 JAVA
- LintCode-----17.带重复元素的子集
- (lintcode)第18题 带重复元素的子集
- Java实现-带重复元素的子集
- lintcode---子集(带重复元素和不带重复元素的两种解法)
- 带重复元素的子集
- 带重复元素的子集
- LintCode笔记(11)—— 带重复元素的子集
- 题目:带重复元素的子集
- lintcode-带重复元素的排列 -16
- LintCode 16 带重复元素的排列
- LintCode 带重复元素的子序列
- lintcode(16)带重复元素的排列
- LintCode:M-带重复元素的排列
- (lintcode)第16题 带重复元素的排列
- 注解(Annotation)自定义注解入门
- DGPS RTK
- 内存对齐
- javascript最佳实践
- Leveldb 实现原理(转)
- LintCode 18-带重复元素的子集 JAVA
- 1100. Mars Numbers (20)
- jieba和朴素贝叶斯实现文本分类
- LeetCode 206. Reverse Linked List
- C#中stringBuilder和string的区别
- 【Matlab Computer Vision System ToolBox】学习笔记-1-点云配准流程 | 特征匹配
- 104. Maximum Depth of Binary Tree
- 我们公司(创业公司)目前的组织架构-部门划分和部门职能
- java集合使用方法