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

[leetcode]39_组合总和_给定数组且数组可重复

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。
示例 1:
输入:candidates = [2,3,6,7], target = 7,
所求解集为: [ [7], [2,2,3] ]
示例 2:
输入:candidates = [2,3,5], target = 8,
所求解集为: [ [2,2,2,2], [2,3,3], [3,5] ]

解题思路:【回溯】

迭代三部曲:1、确认递归函数返回值与参数:candidates,targetSum,结果数组res,子集合path,子集合首元素起始位置startindex2、回溯函数终止条件:子集合和 = targetSum则回溯寻找下一组子集3、单层搜索过程:循环遍历[startindex, len(candidates)]的每个元素i剪枝:sum(path) > n,则直接回溯寻找子集下一个元素path.append(candidates[i]),再递归寻找子集合下一元素,仍然从i寻找(可重复);若子集合的遍历终止,则回溯path.pop(),遍历下一个元素i + 1。

import traceback
class Solution:def combination_total(self, candidates, targetSum, res, startindex, path=[]):length = len(path)if sum(path) == targetSum:res.append(path[:])#   回溯,寻找下一组returnfor i in range(startindex, len(candidates)):#   剪枝,若加入当前元素candidates[i] > targetSum,则不对candidates[i]进行操作if sum(path) + candidates[i] > targetSum:continuepath.append(candidates[i])self.combination_total(candidates, targetSum, res, i, path)#   回溯path.pop()if __name__ == '__main__':try:# candidates = list(map(int, input().split(',')))candidates = eval(input())targetSum = int(input())res = []solution = Solution()solution.combination_total(candidates, targetSum, res, 0)print(res)except Exception as e:traceback.print_exc()

仅作为代码记录,方便自学自查自纠

http://www.lryc.cn/news/446490.html

相关文章:

  • 【笔记】第三节 组织与性能
  • 数据库——sql语言学习 查找语句
  • 【计算机网络 - 基础问题】每日 3 题(二十三)
  • JPA + Thymeleaf 增删改查
  • Android常用C++特性之std::this_thread
  • 成语700词(31~45组)
  • vue3组件通信(组合式API)
  • 从预测性维护到智能物流:ARM边缘计算控制器的工业实践
  • 2024年汉字小达人区级自由报名备考冲刺:最新问题和官模题练一练
  • Linux相关概念和重要知识点(8)(操作系统、进程的概念)
  • 测序技术--组蛋白甲基化修饰、DNA亲和纯化测序,教授(优青)团队指导:从实验设计、结果分析到SCI论文辅助
  • Llama 3.2来了,多模态且开源!AR眼镜黄仁勋首批体验,Quest 3S头显价格低到离谱
  • 软考高级:SOA 和微服务 AI 解读
  • 【每天学个新注解】Day 6 Lombok注解简解(五)—@SneakyThrows
  • C语言 | Leetcode C语言题解之第437题路径总和III
  • Linux-TCP重传
  • Python通过Sqlalchemy框架实现增删改查
  • windows C++ - 任务计划程序(并发运行时)
  • 多米诺骨牌(模拟)
  • Unity DOTS系列之Struct Change核心机制分析
  • 「数组」定长滑动窗口|不定长滑动窗口 / LeetCode 2461|2958(C++)
  • 【华为】用策略路由解决双出口运营商问题
  • 第L2周:机器学习|线性回归模型 LinearRegression:1. 简单线性回归模型
  • 1.5 测试用例
  • P1101 单词方阵
  • 通过 OBD Demo 体验 OceanBase 4.3 社区版
  • 浅拷贝和深拷贝(Java 与 JavaScript)
  • 力扣每日一题 2306.公司命名
  • HTML-DOM模型
  • vue项目报错: At least one is required in a single file component.的主要原因及解决办法