题目

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

思路

这道题采用遍历的方式效率太低,因此可以想到回溯的方式。

算法:

1.对candidates进行排序

2.回溯函数combination:索引i,当前数组tmp,下一目标target:

  2.1 当target == 0时,满足条件,tmp添加进入result

  2.2 剪枝 当索引等于candidates长度的时候,已经结束,return;当target < candidates[i]的时候,后续也不存在满足的结果,因此剪枝,return。

  2.3 重复调用自身

  2.4 调用下一个元素

实现

class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
if(not candidates):
return []
n=len(candidates)
result=[]
candidates.sort() def combination(idx, tmp, target):
if target == :
result.append(tmp)
return
if idx == n or target < candidates[idx]:
return
combination(idx, tmp+[candidates[idx]],target-candidates[idx])
combination(idx+, tmp, target) combination(,[],target)
return result

leetcode刷题-39组合总和的更多相关文章

  1. leetcode刷题-40组合总和2

    题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用 ...

  2. leetcode刷题-77组合

    题目 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3 ...

  3. Java实现 LeetCode 39 组合总和

    39. 组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字 ...

  4. [leetcode] 39. 组合总和(Java)(dfs、递归、回溯)

    39. 组合总和 直接暴力思路,用dfs+回溯枚举所有可能组合情况.难点在于每个数可取无数次. 我的枚举思路是: 外层枚举答案数组的长度,即枚举解中的数字个数,从1个开始,到target/ min(c ...

  5. 【LeetCode】39. 组合总和

    39. 组合总和 知识点:递归:回溯:组合:剪枝 题目描述 给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数  ...

  6. [LeetCode] 39. 组合总和

    题目链接 : https://leetcode-cn.com/problems/combination-sum/ 题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ...

  7. LeetCode刷题时引发的思考:Java中ArrayList存放的是值还是引用?

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 今天我在刷LeetCode ...

  8. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  9. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

随机推荐

  1. CornerNet

    论文 CornerNet: Detecting Objects as Paired Keypoint

  2. SQL Server中的集合运算: UNION, EXCEPT和INTERSECT

    SQL Server中的集合运算包括UNION(合并),EXCEPT(差集)和INTERSECT(相交)三种. 集合运算的基本使用 1.UNION(合并两个查询结果集,隐式DINSTINCT,删除重复 ...

  3. 【模式识别与机器学习】——PCA与Kernel PCA介绍与对比

    PCA与Kernel PCA介绍与对比 1. 理论介绍 PCA:是常用的提取数据的手段,其功能为提取主成分(主要信息),摒弃冗余信息(次要信息),从而得到压缩后的数据,实现维度的下降.其设想通过投影矩 ...

  4. MarkDown总结(适合初学者快速入门)

    本文转自https://blog.csdn.net/sun8112133/article/details/79871702 总得的来说,MarkDown是一种简单.轻量级的标记语法,它是基于HTML之 ...

  5. C#LeetCode刷题之#852-山脉数组的峰顶索引(Peak Index in a Mountain Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4003 访问. 我们把符合下列属性的数组 A 称作山脉: A.le ...

  6. C#LeetCode刷题之#88-合并两个有序数组(Merge Sorted Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3686 访问. 给定两个有序整数数组 nums1 和 nums2, ...

  7. 12 种使用 Vue 的最佳做法

    随着 VueJS 的使用越来越广泛,出现了几种最佳实践并逐渐成为标准. 1.始终在 v-for 中使用 :key 在需要操纵数据时,将key属性与v-for指令一起使用可以让程序保持恒定且可预测. 这 ...

  8. Mybatis-07-多对一和一对多处理

    多对一处理 如, 多个学生,对应一个老师 多个学生关联一个老师(多对一) 一个老师有很多学生(一对多) SQL: create table `teacher`( `id` int(10) not nu ...

  9. 初期web渗透的学习路线

    成长路线 信息安全 前端安全 web安全 基础,书籍推荐 <网站入侵与脚本攻防修炼> 什么是web漏洞 什么是sql注入漏洞 什么是数据库 什么是文件上传漏洞 什么是跨站脚本攻击 < ...

  10. windows 下 安装 RabbitMQ

    RabbitMQ是一个在AMQP协议标准基础上完整的.可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器.它扮演 ...