LeetCode-90.子集II(相關話題:回溯)
阿新 • • 發佈:2018-12-11
給定一個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:
輸入: [1,2,2]
輸出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
解題思路:先將陣列nums排序,然後逐個求解元素個數為0-nums.length的所有子集
Java程式碼:
class Solution { public List<List<Integer>> subsetsWithDup(int[] nums) { Arrays.sort(nums); List<List<Integer>> res = new LinkedList<>(); for(int i = 0; i <= nums.length; i++){ List<Integer> tmp = new ArrayList<>(i); dfs(nums, 0, i, tmp, res); } return res; } private void dfs(int[] nums, int s, int n, List<Integer> tmp, List<List<Integer>> res){ if(tmp.size() == n){ res.add(new ArrayList<Integer>(tmp)); return; } for(int i = s; i < nums.length; i++){ if(i > s && nums[i] == nums[i-1]) continue; tmp.add(nums[i]); dfs(nums, i+1, n, tmp, res); tmp.remove(tmp.size()-1); } } }