当前位置: 首页 > news >正文

回溯-组合总和

39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

输入:数组、整型变量
输出:二元列表
思路:此题目可以优化,进行剪枝操作
定义递归函数 dfs(target,combine,idx) 表示当前在 candidates 数组的第 idx 位,还剩 target 要组合,已经组合的列表为 combine。递归的终止条件为 target≤0 或者 candidates 数组被全部用完。那么在当前的函数中,每次可以选择跳过不用第 idx 个数,即执行 dfs(target,combine,idx+1)。也可以选择使用第 idx 个数,即执行 dfs(target−candidates[idx],combine,idx),注意到每个数字可以被无限制重复选取,因此搜索的下标仍为 idx。

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<Integer> combine = new ArrayList<>();
        dfs(target, combine, candidates, 0);
        return result;
    }
    public void dfs(int target, List<Integer> combine, int[] candidates, int idx){
        //递归终止条件
        if(idx == candidates.length){
            //当前数组所有元素使用完
            return;
        }
        if(target == 0){
            //说明已经找到所有的元素
            result.add(new ArrayList<>(combine));
            return;
        }
        //第一种情况,直接跳过idx位置的数
        dfs(target, combine, candidates, idx + 1);
        //第二种情况,使用idx位置的数
        if(target - candidates[idx] >= 0){
            combine.add(candidates[idx]);
            //再进行递归
            dfs(target - candidates[idx], combine, candidates, idx);
            //回溯
            combine.remove(combine.size() - 1);
        }
    }
}

相关文章:

  • Three.js贴图技巧:优化性能与效果
  • 算法-深度优先搜索DFS
  • Redis 在windows下的下载安装与配置
  • 质检LIMS系统在诊所的应用 诊所质检行业的最优LIMS系统
  • knowledge-微前端(多个前端应用聚合的一个应用架构体系,每个小的应用可独立运行,独立开发,独立部署上线)
  • Linux与HTTP中的Cookie和Session
  • javaFX的使用
  • 如何在linux中利用方向键快速查找之前的敲过的命令
  • 第六:go 操作 redis-go
  • MediaPipe 手势识别全解析:如何在移动端实现实时手部跟踪
  • 网络空间安全(39)入侵排查
  • 【C++模板】
  • ambiq apollo3 Flash实例程序注释
  • 通过Typora + PicGo + 阿里云对象存储(OSS)实现图床
  • Numpy
  • 【vulhub/wordpress靶场】------获取webshell
  • 为什么 API 接口漏洞越来越多?与现代网站开发环境的关系
  • [Deepseek 学c++]初始化捕获与按值(显式与隐式)捕获傻傻分不清
  • 2025年云南食品安全员管理员考试题库
  • 代码随想录_动态规划
  • 设计师网站 知乎/百度搜索推广官网
  • 嘉兴网站制作建设/seo引流什么意思
  • 个人如何建设网站/怎么做公司网页
  • 电力建设专家答疑在哪个网站/台州网站建设方案推广
  • 建设网站网站名/今日头条新闻头条
  • 定制家具生产厂家/盐城seo培训