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

python-leetcode 47.组合总和

题目:

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

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

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


方法一:递归回溯

class Solution(object):
    def combinationSum(self, candidates, target):
        """
        :type candidates: List[int]
        :type target: int
        :rtype: List[List[int]]
        """
        candidates.sort()#排序,减少无效递归
        ans=[] #存储所有满足条件的组合
        path=[] #存储当前正在尝试的组合
        def dfs(i,left): #当前遍历到 candidates 的索引,left目前需要的目标和
            if left==0: #找到了一组合法的组合
                ans.append(list(path))  #存储 path 的副本,否则 path 继续变化
                return 
            if i ==len(candidates) or left<candidates[i]:#索引超出范围,如果 left 已经小于当前候选数,后续的数(更大)也不可能满足 left,直接返回
                return 
            dfs(i+1,left)#跳过当前元素i,直接递归处理下一个元素
            path.append(candidates[i])#将当前元素加入 
            dfs(i,left-candidates[i])
            path.pop()#移除 path 中最后添加的元素,以尝试其他组合
        dfs(0,target)
        return ans
        return ans

源自力扣官方题解
 

相关文章:

  • Redis 面试思路
  • 深度学习-148-langchain之如何使用with_structured_output()从模型中返回结构化数据
  • 机试准备第19天
  • 4.angular 服务
  • 5.3《凸透镜成像的规律》——先于5.2《生活中的透镜》讲
  • Windows 部署 RuoYi 前后端分离项目
  • Mac下Ollama安装全攻略:开启本地大模型之旅
  • Qt Creator入门
  • 蓝桥杯[每日一题] 模拟题:蚂蚁感冒(java版)
  • Java面试黄金宝典1
  • 笔记本运行边缘计算
  • 使用React和google gemini api 打造一个google gemini应用
  • 【数据挖掘】Python基础环境安装配置
  • 卸载conda,poetry常用命令,vscode使用poetry虚拟环境
  • 【万字总结】前端全方位性能优化指南(三)——GPU渲染加速、WebGPU、OffscreenCanvas多线程渲染
  • 电商项目Ts版本
  • 【HarmonyOS Next】鸿蒙中自定义弹框OpenCustomDialog、CustomDialog与DialogHub的区别详解
  • 标准卡尔曼滤波
  • 采购供应链管理培训及供应链网络优化案例P109(109页PPT)(文末有下载方式)
  • python爬虫笔记(一)
  • 美国将于6月14日举行阅兵式,美媒报当天是特朗普生日
  • 波兰斯基最新回忆录追述“二战”童年往事
  • 苹果第二财季营收增长5%,受关税政策影响预计下一财季新增9亿美元成本
  • 万达电影去年净利润亏损约9.4亿元,计划未来三年内新增25块IMAX银幕
  • 当老年人加入“行为艺术基础班”
  • 浦发银行一季度净利175.98亿增1.02%,不良率微降