Leetcode 90.子集
阿新 • • 發佈:2018-12-23
子集
給定一個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:
輸入: [1,2,2]
輸出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.List; 4 5 class Solution { 6 public List<List<Integer>> subsetsWithDup(int[] nums) { 7 List<List<Integer>> list = new ArrayList<>(); 8 if(nums == null || nums.length == 0){ 9 return list; 10 } 11 List<Integer> data = new ArrayList<>(); 12 int length = nums.length; 13 boolean[] visit = newboolean[length]; 14 list.add(data); 15 Arrays.sort(nums); 16 dfs(list,data,length,nums,0,visit); 17 return list; 18 } 19 20 void dfs(List<List<Integer>> list,List<Integer> data,int length,int[] nums,int start,boolean[] visit){ 21 for(inti = start;i < length;i++){ 22 if(!visit[i]){ 23 if(i > 0 && nums[i] == nums[i - 1] && !visit[i - 1]){ 24 continue; 25 } 26 data.add(nums[i]); 27 visit[i] = true; 28 list.add(new ArrayList<>(data)); 29 dfs(list,data,length,nums,i + 1,visit); 30 visit[i] = false; 31 data.remove(data.size() - 1); 32 } 33 } 34 } 35 }