給你一個整數數組 nums ,其中可能包含重復元素,請你返回該數組所有可能的子集(冪集)。
解集 不能 包含重復的子集。返回的解集中,子集可以按 任意順序 排列。
示例 1:
輸入:nums = [1,2,2]
輸出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
解題思路
通過排序,將相同的元素排在一起,在進行回溯的時候,一個遞歸的節點內只允許重復的元素出現一次
代碼
class Solution {List<List<Integer>> lists=new ArrayList<>();public void bc(int[] arr,int cur,LinkedList<Integer> list) {lists.add(new LinkedList<>(list));for(int i=cur;i<arr.length;i++){if(i>cur&&arr[i]==arr[i-1]) continue;list.addLast(arr[i]);bc(arr, i+1, list);list.removeLast();}}public List<List<Integer>> subsetsWithDup(int[] nums) {Arrays.sort(nums);bc(nums,0,new LinkedList<>());return lists;}
}