力扣小白刷题之39题组合求和

题目描述

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

思路

回溯+剪枝
在这里插入图片描述
说明:

  1. 蓝色结点表示:尝试找到组合之和为该数的所有组合,怎么找呢?逐个剪掉候选数组中的元素即可;
  2. 以 target = 7 为根节点,每一个分支做减法(减去的是数组中的每个数);
  3. 减到 0 或者 负数 的时候,到了叶子节点;
  4. 减到 0 的时候结算,这里 “结算”的意思是添加到结果集;
  5. 从根节点到叶子节点(必须为 0)的路径,就是题目要我们找的一个组合。
    在这里插入图片描述

重复的原因:是在较深层的节点值考虑了之前考虑过的元素,因此需要设置“下一轮搜索的起点”即可。

去重复

  • 在搜索的时候,需要设置搜索起点的下标 start,由于一个数可以使用多次,下一层的节点从这个搜索起点开始搜索;
  • 在搜索起点 start 之前的数因为以前的分支搜索过了,所以一定会产生重复。
  • 设置:下一轮搜索的起点 start = i

代码

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值