1. 程式人生 > >Leetcode 90.子集

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 }