力扣90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。

力扣90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。

三种解法:

1.递归法(扩展法)

力扣90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。

同力扣78题解法差不多,加入Arrays.sort(nums)进行排序;

结束后把res转变为hashset集合,集合的特点是没有重复的元素,所以做到去重的效果,最后再把集合转变为list;

2. 回溯法

力扣90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。

也是同78题类似,加入Arrays.sort(nums)进行排序;

在backtrack循环中加入

if (i > start && nums[i] == nums[i - 1])判断语句

i > start 的作用是因为判断此次循环是否为第一次循环,和num[i] == num[i-1]共同作用后就可以看作:

判断第上一次循环的数和本次循环的数是否相同,如果相同就跳过

 

3.DFS(深度优先)

力扣90题:给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。

同回溯法类似,但是深度优先。