java求无重复集合所有子集
2016-09-10 23:32
337 查看
在lintcode上遇到一道题,如下:
给定一个含不同整数的集合,返回其所有的子集
注意事项:
子集中的元素排列必须是非降序的,解集必须不包含重复的子集。
解答如下
解答采用的是深度优先遍历,先取原数组一个元素,再构造包括这个元素的两个,三个……n个元素的集合。dfs中的start就指向这个元素的,它在不断地后移(i+1)。
从这道题了解到了ArrayList,即动态数组,java中的一般的数组是不可变长度,而动态数组可以实现增
给定一个含不同整数的集合,返回其所有的子集
注意事项:
子集中的元素排列必须是非降序的,解集必须不包含重复的子集。
解答如下
import java.util.Arrays; import java.util.ArrayList; public class subSet { /** * 不重复集合求子集 * @param S: A set of numbers. * @return: A list of lists. All valid subsets. */ public static void main(String[] args) { int[] first = new int[]{1, 2, 3}; ArrayList<ArrayList<Integer>> res = subsets(first); for(int i = 0; i < res.size(); i ++){ System.out.println(res.get(i)); } } public static ArrayList<ArrayList<Integer>> subsets(int[] nums) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> item = new ArrayList<Integer>(); if(nums.length == 0 || nums == null) return res; Arrays.sort(nums); //排序 dfs(nums, 0, item, res); //递归调用 res.add(new ArrayList<Integer>()); //最后加上一个空集 return res; } public static void dfs(int[] nums, int start, ArrayList<Integer>item, ArrayList< 4000 ArrayList<Integer>>res){ for(int i = start; i < nums.length; i ++){ item.add(nums[i]); //item是以整数为元素的动态数组,而res是以数组为元素的数组,在这一步,当item增加完元素后,item所有元素构成一个完整的子串,再由res纳入 res.add(new ArrayList<Integer>(item)); dfs(nums, i + 1, item, res); item.remove(item.size() - 1); } } }
解答采用的是深度优先遍历,先取原数组一个元素,再构造包括这个元素的两个,三个……n个元素的集合。dfs中的start就指向这个元素的,它在不断地后移(i+1)。
从这道题了解到了ArrayList,即动态数组,java中的一般的数组是不可变长度,而动态数组可以实现增
ArrayList.add(),删
ArrayList.remove(),查
ArrayList.get(),改
a.get(index)=b
相关文章推荐
- 求集合的所有子集(java实现)
- Java 得到集合中所有子集
- java 集合 从类似如下的文本文件中读取出所有的姓名,并打印出重复的 * 姓名和重复的次数,并按重复次数排序:
- 傻瓜方法求集合的所有子集问题(java版)
- Java递归求某个集合的所有子集组成的集合,即幂集
- 面试题: 已知一个含有n个不同元素的集合,要求打印其所有具有k个元素的子集(不允许有重复的)
- 【Java】通过位运算求一个集合的所有子集
- 给定一个可能包含重复的整数的集合,S返回所有可能的子集。
- 一个集合的所有子集的Java代码实现
- Java 通过位运算求一个集合的所有子集方法
- 程序员面试金典(动态规划):返回某集合的所有子集(java解法)
- Java 求集合的所有子集
- 给定一个集合,输出它的所有子集(JAVA实现)
- 不包含重复元素的集合S,求其所有子集
- 去除java的泛型集合(字符串)重复元素参考代码
- 求集合的所有子集
- [CareerCup 8.3] 求一个集合的所有子集
- java中过滤集合中的重复元素
- 求集合的所有子集(续)
- 有一个集合A,它又n个元素,请用回溯法输出它所有的子集。