首页 > 其他分享 >穷举vs暴搜vs深搜vs回溯vs剪枝系列一>组合总和

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>组合总和

时间:2025-01-06 17:32:38浏览次数:3  
标签:剪枝 int sum private vs candidates ret path 穷举

 题目:


方法一:

解析: 


 

代码: 

private List<List<Integer>> ret;
    private List<Integer> path;
    private int aim; 

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        aim = target;
        ret = new ArrayList<>();
        path = new ArrayList<>();
        dfs(candidates,0,0);

        return ret;
    }

    private void dfs(int[] candidates,int pos, int sum){
        if(sum == aim){
            ret.add(new ArrayList<>(path));
            return;
        } 

        if(aim < sum || pos == candidates.length) return;//剪枝二

        for(int i = pos; i < candidates.length; i++){
            path.add(candidates[i]);
            dfs(candidates,i, sum + candidates[i]);//剪枝一:从i开始往后选择
            path.remove(path.size()-1);
        }
    }

方法二: 

 


代码: 

 /**
    方法二:枚举元素个数 
    */ 

    private List<List<Integer>> ret;
    private List<Integer> path;
    private int aim; 

    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        aim = target;
        ret = new ArrayList<>();
        path = new ArrayList<>();
        dfs(candidates,0,0);

        return ret;
    }


    private void dfs(int[] candidates,int pos, int sum){
        if(sum == aim){
            ret.add(new ArrayList<>(path));
            return;
        } 

        if(aim < sum || pos == candidates.length) return;//剪枝二
        //k来枚举个数, candidates出现多少次
        for(int k = 0; k*candidates[pos] + sum <= aim; k++){
            if(k != 0) path.add(candidates[pos]);   
            dfs(candidates,pos+1,sum + k*candidates[pos]);
        }

        //回溯
        for(int k = 1; k*candidates[pos] + sum <= aim; k++)
            path.remove(path.size()-1);
    }

标签:剪枝,int,sum,private,vs,candidates,ret,path,穷举
From: https://blog.csdn.net/robin_suli/article/details/144952867

相关文章

  • LVS负载均衡配置
    上期文章我用nginx配置了负载均衡,nginx的负载均衡是7层架构,下面我向大家介绍的是四层架构的负载均衡LVS,LVS负载均衡有三种工作模式,NAT、DR、隧道模式,本次向大家介绍其中前两项工作模式。在开始之前,我们先提前准备好一台NAT服务器(用最小化安装,再用MX连接防火墙...都需要关闭),两......
  • 你有写过vs code插件吗?
    很抱歉,虽然我可以提供关于编写VSCode插件的建议和指导,但我本身并没有实际编写过VSCode插件。不过,我可以向你介绍一些编写VSCode插件的基本概念和步骤,帮助你入门和提高。VSCode插件通常使用TypeScript或JavaScript编写,并且需要遵循VSCode扩展API的规范。以下......
  • VsCode SSH 免密连接Linux服务器的正确操作(踩了许多坑,总结出来的)
    Window端:打开WindowPowerShell输入ssh-keygen-trsa得到公钥:C:\Users\admin.ssh\id_rsa.pubLinux服务器端:nano~/.ssh/authorized_keys复制粘贴公钥,保存退出不必更改authorized_keys文件权限sudonano/etc/ssh/sshd_config#StrictModesyes改成StrictMod......
  • vscode下载vetur和vue-helper插件之后删除键(backspace)失效
    最近我在学习前端的过程中,使用vscode下载的vue的插件:vetur和vue-helper这两个但随后在写代码的时候发现删除键(backspace)不能使用,其他键都能正常使用,也可以用鼠标选中右键剪切/删除最后发现是上面的插件会占用backspace按键作为插件的功能键解决方法点击左上角——文件——首选......
  • python毕设 基于微信小程序的写字楼物业报修管理系统cgc660vs 后端程序+论文 可用于毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,写字楼作为现代都市的重要组成部分,其物业管理水平直接影响到入驻企业的办公体验和运营效率。然而,传统的物业报修管理......
  • vsftpd 配置注释
    vsftpd.confanonymous_enable=YES #是否允许匿名用户登入local_enable=YES #是否允许本地用户登入write_enable=YES #是否可写local_umask=022 #上传文件的umask码。dirmessage_enable=YES #是否开启信息提示#可以在目录下创建.message文件,当用......
  • voice vs sound ; coca
     left4100WORD 1: VOICE  WORDW1W2  AUTOMATED2330  DISSENTING1901  OFFSCREEN9336  LOWERED7368  LOWERING2213  RAISED106115  RAISES1262  RAISING55710  RAISE83516  SINGSONG102......
  • vscode GDB远程调试安卓
    如果是比较新的androidndk的版本,建议使用lldb进行调试,参考:vscodelldb远程调试-OpenFDE-OpenFDEDocs,将lldbserverpush到移动端,开启端口调试,配置launch.json即可。我调试的项目使用的是ndk-r17c,该版本的ndk没有lldb调试,只有gdb调试。在prebuilt目录下,使用find-namegdbse......
  • vscode+vim配置小记
    引入在windows系统下使用vscode+vim编写代码时会遇到一个令人略有不爽的小麻烦。在vim的normal模式下,首先需要进入insert模式才能正常编写。这里一般是在英文输入法键入相应字母才能进入,比如“i”和“o”我们进入insert模式之后,在敲代码的过程中难免会需要增加些中文注释,这个时......
  • 模拟IC入门——设计反相器(二)DRC、LVS及一些常见错误
    DRC、LVS及一些常见错误在上节中,我们介绍了如何绘制方向器的版图及DRC校验,但DRC存在一些问题没有解决。本节我们先解决一下DRC一些问题然后再介绍LVS这是我们遇到的问题,以第一个为例,我们看到下面的注释:意思是GT层必须被SN或者SP包围,否则寄生电容过大我们可以点右键,highli......