LeetCode第39题组合总和

简介: LeetCode第39题"组合总和"的解题思路和技巧,采用回溯法通过递归代替多层嵌套循环,有效解决组合问题。

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

image.png

分析一波题目

组合问题如果通过枚举发现还是很难的,因为他涉及到嵌套多层for循环的情况,这个时我们需要使用回溯法

回溯法是通过递归来实现的。通过递归代替多层嵌套循环。

我们可以把获取组合数据的过程,想成在遍历一棵树,每个节点上都有可以选择的数字。

下面是示意图,我们每次都从子节点上取一个数据作为组合的元素,不断的取,直到满足组合条件为止,取到一个之后我们需要回退回来,继续找,题目说明每个数字可以重复使用,也就是每次都需要考虑先取自己作为组合的元素。

image.png

解题关键

1、递归法解决嵌套循环问题

2、递归结束条件控制,找到了组合的数据就结束,或者组合已经大于target了,也要结束递归。

编码解决

class Solution {
   
   

    private List<List<Integer>> result = new ArrayList<>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
   
   

        //递归 回溯
        backtracking(candidates,target, new ArrayList<>(), 0, 0);
        return result;

    }

    public void backtracking(int[] candidates, int target,List<Integer> path, int startIndex, int sum) {
   
   

        //结束条件
        if(sum == target) {
   
   
            result.add(new ArrayList(path));
            return;
        }
        if(sum > target) {
   
   
            return;
        }
        //递归单层逻辑
        for(int i=startIndex; i<candidates.length; i++) {
   
   

               path.add(candidates[i]);
               sum += candidates[i];
               //开始递归 startIndex传i,就是考虑每个数字都可以重复使用的情况
               backtracking(candidates, target, path, i, sum);
               //回溯
               sum = sum - candidates[i];
               path.remove(path.size()-1);
        }
    }
}

总结

回溯法通过递归解决多层嵌套循环的问题,以后记得多层嵌套循环的情况就可以考虑使用递归是否合适。

相关文章
|
存储 机器学习/深度学习 算法
MMDetection3d对KITT数据集的训练与评估介绍
MMDetection3d对KITT数据集的训练与评估介绍
2619 0
MMDetection3d对KITT数据集的训练与评估介绍
|
8月前
|
域名解析 安全 数据安全/隐私保护
如何选择网站模版快速建站?
在建站初期,确定主题、后台搭配、域名和主机是关键。使用教程引导用户搭建,注意安全与稳定性。部署部署后,定期更新内容以优化SEO。网站运营需管理维护,及时更新密码和后台。
178 12
|
7月前
|
人工智能 自然语言处理 搜索推荐
小米实测:Deepseek——你的私人旅游攻略定制专家!
大家好,我是小米,一个31岁的技术爱好者。今天分享如何用Deepseek规划完美旅行。Deepseek能快速整合信息、提供个性化推荐,省时省力,并支持实时问答。从目的地选择到行程规划,再到预订机票住宿和旅行中的实时帮助,它都能提供强大支持。希望今天的分享能帮到你,期待你用Deepseek规划出属于自己的精彩旅程!如果你觉得有用,欢迎点赞、转发并关注我的微信公众号“软件求生”,获取更多技术干货。
649 8
|
8月前
|
人工智能 自然语言处理 并行计算
Kokoro-TTS:超轻量级文本转语音模型,支持生成多种语言和多种语音风格
Kokoro-TTS 是一款轻量级文本转语音模型,支持多语言和多语音风格生成,具备实时处理能力和低资源占用,适用于多种应用场景。
1217 5
Kokoro-TTS:超轻量级文本转语音模型,支持生成多种语言和多种语音风格
|
11月前
|
机器学习/深度学习 搜索推荐 语音技术
前沿探索:融合语音克隆与TTS技术实现个性化语音助手
【10月更文挑战第20天】随着人工智能技术的迅猛发展,语音助手已经成为我们日常生活不可或缺的一部分。然而,传统的语音助手往往缺乏个性化元素,无法充分满足用户的独特需求。作为技术专家或研究人员,我一直致力于探索如何将语音克隆(Voice Cloning)技术与文本到语音(Text-to-Speech, TTS)技术相结合,创造出更加个性化且自然流畅的语音助手。本文将分享我的研究成果和个人观点,希望能为这一领域的未来发展提供一些启示。
454 2
前沿探索:融合语音克隆与TTS技术实现个性化语音助手
|
9月前
|
数据采集 安全 文件存储
NAS极速远程访问!贝锐花生壳推出飞牛fnOS专属内网穿透服务
贝锐花生壳与飞牛私有云fnOS合作,推出专属客户端及映射服务,实现3倍传输速率提升。用户只需在fnOS应用中心搜索“花生壳”,一键安装即可享受高速、稳定、安全的远程NAS访问体验。
1083 9
|
11月前
|
人工智能
探秘写歌词的技巧和方法:让你的文字唱出旋律,妙笔生词AI智能写歌词软件
在音乐世界里,歌词是触动人心的灵魂。本文介绍如何掌握写歌词的技巧,包括灵感捕捉、结构布局、语言运用等,并推荐《妙笔生词智能写歌词软件》作为创作助手,助你轻松创作动人心弦的歌词。
|
10月前
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
6993 1
|
Java 应用服务中间件 nginx
一文读懂:Nginx 和Gateway
一文读懂:Nginx 和Gateway
1350 1
|
缓存 安全 关系型数据库
Mysql给root开启远程访问权限
MySql出于安全方面考虑默认只允许本机(localhost, 127.0.0.1)来连接访问,所以需要给root账户新增一个远程访问权限。
Mysql给root开启远程访问权限