LeetCode第90题子集II

继续打卡算法题,今天学习的是LeetCode第90题子集II,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

之前学习过78题子集,本题和78题只有一个不同,就是本题中元素是可以重复的,那么我们就需要去重了。

我们可以发现,在同一层如果出现相同的需要去重。我们可以使用boolean数组表示某个元素在某一层是否使用过。

本题解题技巧

1、通过树结构表达求子集组合的过程,对同一层的元素进行去重,避免重复的子集

编码解决

java 复制代码
class Solution {

     List<List<Integer>> result = new ArrayList<>();


    public List<List<Integer>> subsetsWithDup(int[] nums) {

        int n = nums.length;
        boolean[] used = new boolean[n];
        List<Integer> subResult= new ArrayList<>();
        getSubResult( subResult, 0,nums,n, used);
        return result;

    }

 

    public void getSubResult( List<Integer> subResult,int start,int[] nums,int n,boolean[] used) {
        
        //满足了组合条件,是一个子集
        result.add(subResult);
        //遍历到最后一个元素了,除了自己,没有其他组合了,需要结束
        if(start >= n) {
            return;
        }
        
        for(int i=start; i<n; i++) {
            //同一层去重
            if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == false) {
                continue;
            }
            List<Integer> tempSubResult= new ArrayList<>();
            tempSubResult.addAll(subResult);
            tempSubResult.add(nums[i]);
            used[i] = true;
            //递归
            getSubResult( tempSubResult, i+1,nums,n, used);
            //开始遍历下一层了
            used[i] = false; 
        }    
    }
}

总结

1、子集问题,画图之后就好理解了,先理思路再画图就能比较好的求解。

相关推荐
王老师青少年编程几秒前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:士兵站队
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·士兵战队
无限进步_4 分钟前
二叉树的中序遍历(非递归实现)
开发语言·数据结构·c++·windows·算法·visual studio
zb200641204 分钟前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
weixin_704266057 分钟前
SpringCloud Feign 声明式服务调用
后端·spring·spring cloud
计算机安禾9 分钟前
【数据结构与算法】第48篇:算法思想(三):贪心算法
c语言·开发语言·数据结构·算法·贪心算法·代理模式·图论
_深海凉_15 分钟前
LeetCode热题100-爬楼梯
算法·leetcode·职场和发展
j_xxx404_16 分钟前
力扣C++算法:哈希表(存在重复元素|存在重复元素II|字母异位词分组)
算法·leetcode·散列表
穿条秋裤到处跑16 分钟前
每日一道leetcode(2026.04.17):镜像对之间最小绝对距离
算法·leetcode
codebrick18 分钟前
408 数据结构:快排 / 堆排 / 归并 / 希尔 等排序算法对比(复杂度、稳定性、真题考点
数据结构·考研·算法·排序算法·408