题目:
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
解题思路:
回溯法求解组合问题,求解方式都差不多。
代码实现:
class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { List<List<Integer>> result = new LinkedList<List<Integer>>(); Arrays.sort(nums); List<Integer> list = new LinkedList<Integer>(); dfs(nums, result, list, 0); return result; } private void dfs(int[] nums, List<List<Integer>> result, List<Integer> list, int start) { result.add(new LinkedList<Integer>(list)); for (int i = start; i < nums.length; i ++) { if (i > start && nums[i - 1] == nums[i]) continue; list.add(nums[i]); dfs(nums, result, list, i + 1); list.remove(list.size() - 1); } } }