子集
给定一个可能包含重复元素的整数数组 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 }
原文地址:https://www.cnblogs.com/kexinxin/p/10163071.html
时间: 2024-10-08 16:06:22