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

代码随想录算法训练营第二十九天| 回溯算法02

39. 组合总和

本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制

题目链接/文章讲解:代码随想录

视频讲解:带你学透回溯算法-组合总和(对应「leetcode」力扣题目:39.组合总和)| 回溯法精讲!_哔哩哔哩_bilibili

对应组合可以写出来,注意startIndex以及剪枝tiaojian

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        result=[]
        self.backtracking(candidates,target,0,[],result,0)
        return result
    def backtracking(self,candidates,target,startIndex,path,result,cur_sum):
        if cur_sum==target:
            result.append(path[:])
            return
        for i in range(startIndex,len(candidates)):
            if cur_sum+candidates[i]>target:
                continue
            path.append(candidates[i])
            self.backtracking(candidates,target,i,path,result,cur_sum+candidates[i])
            path.pop()

 40. 组合总和II

本题开始涉及到一个问题了:去重。

注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。

题目链接/文章讲解:代码随想录

视频讲解:回溯算法中的去重,树层去重树枝去重,你弄清楚了没?| LeetCode:40.组合总和II_哔哩哔哩_bilibili

 先排序,再剪枝

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        result=[]
        candidates.sort()
        self.backtracking(candidates,target,0,[],result,0)
        return result
    def backtracking(self,candidates,target,startIndex,path,result,cur_sum):
        if cur_sum==target:
            result.append(path[:])
            return
        for i in range(startIndex,len(candidates)):
            if i>startIndex and candidates[i]==candidates[i-1]:
                continue
            if cur_sum+candidates[i]>target:
                break
            path.append(candidates[i])
            self.backtracking(candidates,target,i+1,path,result,cur_sum+candidates[i])
            path.pop()


http://www.kler.cn/a/535162.html

相关文章:

  • 【数据结构-Trie树】力扣720. 词典中最长的单词
  • bat脚本实现自动化漏洞挖掘
  • 【QT笔记】使用QScrollArea实现多行文本样式显示
  • 2.Mkdocs配置说明(mkdocs.yml)【最新版】
  • React组件中的列表渲染与分隔符处理技巧
  • ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
  • 关于React前端
  • UE5 蓝图学习计划 - Day 13:确定游戏类型与核心功能
  • Android 9.0 mtk默认浏览器Browser下载app不能安装问题的解决办法
  • Flutter的绘制流程
  • [Unity角色控制专题] 详细说明如何使用Character Controller配合脚本实现类似MC的第一人称控制(仅移动与视角摇晃)
  • C++《AVL树》
  • 一文解释nn、nn.Module与nn.functional的用法与区别
  • 20250206在ubuntu20.04下使用unzip解压缩带中文名的文件
  • Golang的引用类型和指针
  • DeepSeek 多模态大模型Janus-Pro本地部署教程
  • 【教程】docker升级镜像
  • 《C#之集训1-20121019c#基础》
  • 【人工智能】使用deepseek初体验
  • 代码随想录算法训练营第四十四天-动态规划-子序列-392.判断子序列
  • OKHttp拦截器解析
  • OpenOffice实现word转pdf
  • 深度整理总结MySQL——行记录存储
  • tcpdump 的工作层次
  • 计算机网络笔记再战——理解几个经典的协议4
  • AI 编程工具—Cursor进阶使用 生成AI工作流