求子集II

题目:

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

在这里插入图片描述
解析:

参考:求子集I
我们再进行修改一下:先把数组进行排序
然后在递归循环中,判断当前数字和上一个数字是否相同,相同的话跳过即可。
也就是说【1,2,2,2】的情况下,只进行0下标【1】和1下标【2】的递归循环,3下标及后面的直接跳过。

代码:

class Solution {
    
    
    public List<List<Integer>> subsetsWithDup(int[] nums) {
    
    
    List<List<Integer>> ans = new ArrayList<>();
    Arrays.sort(nums); //排序
    getAns(nums, 0, new ArrayList<>(), ans);
    return ans;
}

private void getAns(int[] nums, int start, ArrayList<Integer> temp, List<List<Integer>> ans) {
    
    
    ans.add(new ArrayList<>(temp));
    for (int i = start; i < nums.length; i++) {
    
    
        //和上个数字相等就跳过
        if (i > start && nums[i] == nums[i - 1]) {
    
    
            continue;
        }
        temp.add(nums[i]);
        getAns(nums, i + 1, temp, ans);
        temp.remove(temp.size() - 1);
    }
}


}

猜你喜欢

转载自blog.csdn.net/weixin_42120561/article/details/114269261