[LeetCode][Java] Subsets II
2015-07-19 22:16
411 查看
题目:
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], [] ]
题意:
给定一个整数集合nums,可能包含重复元素,返回所有的子集。注意:
1.子集中的元素都是升序排列的
2. 不能含有相同的子集
比如,
如果nums =
[1,2,2],
一个解为:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
算法分析:
* 与《Subsets》方法类似* 结合方法Combinations https://leetcode.com/problems/combinations/
* 不同之处在于,出现重复元素,不往 ArrayList<ArrayList<Integer>> fres 里添加
* if(!res.contains(item))
* res.add(new ArrayList<Integer>(item));
AC代码:
<span style="font-family:Microsoft YaHei;">public class Solution { public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] nums) { ArrayList<ArrayList<Integer>> fres = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> flist= new ArrayList<Integer>(); Arrays.sort(nums); fres.add(flist); for(int i=1;i<=nums.length;i++) { ArrayList<ArrayList<Integer>> sres = new ArrayList<ArrayList<Integer>>(); sres=combine(nums, i); fres.addAll(sres); } return fres; } public static ArrayList<ArrayList<Integer>> combine(int nums[], int k) { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); if(nums.length<=0 || nums.length<k) return res; helper(nums,k,0,new ArrayList<Integer>(), res); return res; } private static void helper(int nums[], int k, int start, ArrayList<Integer> item, ArrayList<ArrayList<Integer>> res) { if(item.size()==k) { if(!res.contains(item)) res.add(new ArrayList<Integer>(item)); return; } for(int i=start;i<nums.length;i++) // try each possibility number in current position { item.add(nums[i]); helper(nums,k,i+1,item,res); // after selecting number for current position, process next position item.remove(item.size()-1); // clear the current position to try next possible number } } }</span>
相关文章推荐
- java反射机制学习小结
- Java Timer 源码深入分析
- java中重载与重写的区别
- java Hashcode实际应用场景
- spring jdbc PreparedStatementCallback使用方式
- java序列化
- 精选30道Java笔试题解答
- Java多线程实现生产者消费者延伸问题
- Java中的代码块
- JAVA基础_Date,Calender应用
- Java中HashMap,LinkedHashMap,TreeMap的区别
- spring单例bean实现原理
- spring入门教程——笔记
- JAVA程序 通过IP地址 获取MAC地址
- Java中线程的操作
- 深入理解 Java 垃圾回收机制
- [LeetCode][Java] Gray Code
- eclipse 中添加工程 Some projects cannot be imported because they already exist in the workspace
- myeclipse自动补全的设置
- javaee 集锦