力扣:40. 组合总和 II

回溯:

1.先声明好大集合和小集合,在调用回溯函数,终止条件为sum==target,要进行剪枝操作减少遍历的次数,去重操作防止数组中有两个相同的值来组成的集合相同。

java 复制代码
class Solution {
    List<List<Integer>> li1=new ArrayList<List<Integer>>();
    List<Integer> li2=new ArrayList<Integer>();
    public List<List<Integer>> combinationSum2(int[] candidates, int target) {
        //接收计算总和
        int sum=0;
        //方便去重操作
        Arrays.sort(candidates);
        huisu(candidates,target,0,sum);
        return li1;
    }
    public void huisu(int[] candidates,int target,int Index,int sum){
        //终止条件
        if(sum==target ){
            li1.add(new ArrayList<>(li2));
            return ;
        }
        //遍历和剪枝操作
        for(int i=Index;i<candidates.length&&sum+candidates[i]<=target;i++){
    //去重操作
            if (i>Index&&candidates[i]==candidates[i-1]){
                 continue;
            } 
            //加入集合li2中
            li2.add(candidates[i]);
            sum+=candidates[i];
            //嵌套
            huisu(candidates,target,i+1,sum);
            //回溯操作
            sum-=li2.get(li2.size()-1);
            li2.removeLast();
        }
    }
}
相关推荐
weixin_433417673 分钟前
TortoiseGit推送到远端,如何配置
windows·git
2601_9623649710 小时前
Windows Hello VS 传统密码:身份认证安全层级全面对比分析
windows·安全·电脑
什巳12 小时前
JAVA练习278- 和为 K 的子数组
java·学习·算法·leetcode
鱼儿也有烦恼14 小时前
快速学完 LeetCode top 1~50
leetcode·algorithm
Imagine Miracle15 小时前
【WSL】让WSL2后台持久运行不自动关闭的解决方案
linux·windows·wsl
啦啦啦~~~22215 小时前
经典小游X,免费刺激,可离线使用!
windows·游戏·开源软件
月走乂山17 小时前
Windows提示调制解调器报错、同交换机其他电脑正常、远程能连但浏览器打不开——本机DNS配置问题排查
windows·dns·故障排查·网络故障·网络诊断
退休倒计时18 小时前
【每日一题】LeetCode 17. 电话号码的字母组合 TypeScript
算法·leetcode·typescript
衔烛之龙119 小时前
Windows x64 构建 liboqs-java教程
java·windows·python
临沂堇19 小时前
刷题日志 | LeetCode Hot 100 双指针
算法·leetcode·职场和发展