题目
Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
For example,
If S = [1,2,2]
, a solution
is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
分析
在Subsets解法1基础上进行修改,当出现重复元素时,要在上一重复元素的作用范围外添加当前重复元素,避免重复子集的出现。
代码
import java.util.ArrayList; import java.util.Arrays; public class SubsetsII { public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] num) { Arrays.sort(num); ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> list = new ArrayList<Integer>(); results.add(list); int preSize = 0; for (int i = 0; i < num.length; ++i) { int cutPoint = 0; if (i > 0 && num[i] == num[i - 1]) { cutPoint = preSize; } int j = results.size() - 1; preSize = results.size(); while (j >= cutPoint) { list = new ArrayList<Integer>(results.get(j--)); list.add(num[i]); results.add(list); } } return results; } }
LeetCode | Subsets II,布布扣,bubuko.com
原文:http://blog.csdn.net/perfect8886/article/details/22922785