LintCode 17-子集 JAVA
来源:互联网 发布:金蝶软件经销商 编辑:程序博客网 时间:2024/04/30 14:26
本人电子系,只为一学生。心喜计算机,小编以怡情。
子集
给定一个含不同整数的集合,返回其所有的子集
注意事项
子集中的元素排列必须是非降序的,解集必须不包含重复的子集
样例
如果 S = [1,2,3],有如下的解:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
代码与我另外一篇文章相同LintCode 18-带重复元素的子集 JAVA
原因是:我采用的递归的求解方法是相同的,即先根遍历
比如[1,2,3]
我的解分别是[1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]
static public ArrayList<ArrayList<Integer>> subsets(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 17-子集 JAVA
- lintcode-子集17
- LintCode 17 子集
- (lintcode)第17题 子集
- LintCode:子集
- LintCode 18-带重复元素的子集 JAVA
- *[Lintcode]Subsets 子集
- LintCode-----17.子集
- 最大整除子集-LintCode
- 所有子集的和-LintCode
- lintcode-带重复元素的子集-18
- LintCode 18 带重复元素的子集
- lintcode(18)带重复元素的子集
- LintCode-----17.带重复元素的子集
- 划分和相等的子集-LintCode
- 子集和数JAVA实现
- java 求数组子集
- Java实现-子集
- Spring注解整理
- 如何修改uboot的环境变量env的值来指定uImage的名字
- PHP 精度计算引发的灾难性Bug
- Xcode只能选择My Mac无法选择模拟器解决
- OpenCV实践(6)- 离散傅里叶变换
- LintCode 17-子集 JAVA
- http协议详解
- Linux系统启动那些事—基于Linux 3.10内核
- 1015: [JSOI2008]星球大战starwar
- (转)设计模式读书笔记-----简单工厂模式
- 线性表之链式表基本操作
- poj 2965 枚举+DFS
- QQ 空间 上传 图片 ,默认图 很大, 能不能自动默认 是 小图。
- CSS的块级元素和内联元素区别