力扣: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();
        }
    }
}
相关推荐
仰泳的熊猫8 分钟前
LeetCode:698. 划分为k个相等的子集
数据结构·c++·算法·leetcode
WBluuue2 小时前
数据结构与算法:摩尔投票算法
c++·算法·leetcode
小羊学伽瓦2 小时前
【Java数据结构】——常见力扣题综合
java·数据结构·leetcode·1024程序员节
im_AMBER3 小时前
Leetcode 34
算法·leetcode
funfan05173 小时前
【开发AI】Windows安装和使用Milvus的保姆级教程
人工智能·windows·milvus
im_AMBER3 小时前
Leetcode 31
学习·算法·leetcode
刚子编程3 小时前
ASP.NET Core Blazor简介和快速入门三(布局和路由)
windows
吃着火锅x唱着歌4 小时前
LeetCode 74.搜索二维矩阵
算法·leetcode·矩阵
linff9115 小时前
hot 100 技巧题
数据结构·算法·leetcode
洛克大航海6 小时前
Windows 中启动 ms office 报错0xc0000142
windows·ms office·0xco0000142