代码随想录算法训练营Day27|leetcode39 组合总和、leetcode40 组合总和II、leetcode131.分割回文串

 leetcode39 组合总和

题目链接:39. 组合总和 - 力扣(LeetCode)

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

文章讲解:代码随想录 (programmercarl.com)

思路:本题要注意start_index依旧需要,但是在循环时不需要加一,因为结果是可以重复的,另外要注意在结束条件中需要加上当sum>target时也需要返回。

class Solution:
    def backtracking(self, candidates, target, start_index, sum, results, path):
        if sum > target:
            return
        if sum == target:
            results.append(path[:])

        for i in range(start_index, len(candidates)):
            path.append(candidates[i])
            sum += candidates[i]
            self.backtracking(candidates, target, i, sum, results, path)
            sum -= candidates[i]
            path.pop()

    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        results = []
        self.backtracking(candidates, target, 0, 0, results, [])
        return results

 leetcode40 组合总和II

题目链接:40. 组合总和 II - 力扣(LeetCode)

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

文章讲解:代码随想录 (programmercarl.com)

思路:本题与前一题最主要的区别是本题需要做一个去重的操作,去重的思路是先把数组排序,递归时如果当前值等于前一个值就不从这个值开始递归,因为会重复,其他地方与上一题基本相同。

class Solution:
    def backtracking(self, candidates, target, start_index, sum, results, path):
        if sum > target:
            return
        if sum == target:
            results.append(path[:])

        for i in range(start_index, len(candidates)):           #去重
            if i > start_index and candidates[i] == candidates[i - 1]:
                continue                                      #注意这里用continue而不是return
 
            path.append(candidates[i])
            sum += candidates[i]
            self.backtracking(candidates, target, i + 1, sum, results, path)
            sum -= candidates[i]
            path.pop()

    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        results = []
        candidates.sort()
        self.backtracking(candidates, target, 0, 0, results, [])
        return results

 leetcode131.分割回文串

题目链接: 131. 分割回文串 - 力扣(LeetCode)

视频讲解:带你学透回溯算法-分割回文串(对应力扣题目:131.分割回文串)| 回溯法精讲!_哔哩哔哩_bilibili

文章讲解:代码随想录 (programmercarl.com)

 思路:没听懂。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值