标签:
Given a list of numbers that may has duplicate numbers, return all possible subsets
If S = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
Each element in a subset must be in non-descending order.
The ordering between two subsets is free.
The solution set must not contain duplicate subsets.
SOLUTION:
subsets的follow up,包含duplicate怎么办。
很简单,跟subsets I一样,只要在递归过程中加入去重复的判断就可以。比如(1, 2, 2)走到最后那个2的时候,因为跟第一个2重复了,所以,要把这步跳过。翻译成java语言就是:
if (i != 0 && nums[i] = nums[i - 1]){
continue;
}
其中i != 0为了防止边界溢出。
class Solution { /** * @param S: A set of numbers. * @return: A list of lists. All valid subsets. */ public ArrayList<ArrayList<Integer>> subsetsWithDup(ArrayList<Integer> S) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if (S == null || S.size() == 0){ return result; } ArrayList<Integer> list = new ArrayList<Integer>(); Collections.sort(S); helper(result, list, S, 0); return result; } private void helper(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list, ArrayList<Integer> S, int pos){ result.add(new ArrayList<Integer>(list)); for (int i = pos; i < S.size(); i++){ if (i != pos && S.get(i) == S.get(i -1)){ continue; } list.add(S.get(i)); helper(result, list, S, i + 1); list.remove(list.size() - 1); } } }
标签:
原文地址:http://www.cnblogs.com/tritritri/p/4919002.html