Leetcode 90.子集

子集

给定一个可能包含重复元素的整数数组 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 = new boolean[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(int i = 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 }

 

猜你喜欢

转载自www.cnblogs.com/kexinxin/p/10163071.html