原题链接在这里:https://leetcode.com/problems/subsets-ii/
是Subsets的进阶版本。这里有duplicates, e.g. [1,2,2]但是res中不能包含两个[2].
所以在elem加完新元素想要放回res之前,需要先判断res中是否含有这个elem, 若是没有可以加到res中,若是已经有了,就不可以加到res中。
AC Java:
1 public class Solution { 2 public List<List<Integer>> subsetsWithDup(int[] nums) { 3 List<List<Integer>> res = new ArrayList<List<Integer>>(); 4 if(nums == null || nums.length == 0){ 5 return res; 6 } 7 Arrays.sort(nums); 8 res.add(new ArrayList<Integer>()); 9 for(int i = 0; i<nums.length; i++){ 10 int size = res.size(); 11 for(int j = 0; j<size; j++){ 12 ArrayList<Integer> elem = new ArrayList<Integer>(res.get(j)); 13 elem.add(nums[i]); 14 if(!res.contains(elem)){ 15 res.add(elem); 16 } 17 } 18 } 19 return res; 20 } 21 }
原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4841900.html