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],
[]
]
public class Solution { public List<List<Integer>> subsetsWithDup( int [] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if (nums.length== 0 ) return res; Arrays.sort(nums); helper(nums, 0 , new ArrayList<Integer>(), res); return res; } public void helper( int [] nums, int level, List<Integer> item, List<List<Integer>> res) { res.add(new ArrayList<Integer>(item)); for ( int i=level;i<nums.length;i++){ item.add(nums[i]); helper(nums,i+1 ,item,res); item.remove(item.size()-1 ); while (i<(nums.length- 1 )&&nums[i]==nums[i+ 1 ]) { i++; } } } }
原文链接http://blog.csdn.net/crazy__chen/article/details/46434415