代码随想录刷题第二十七天| 39. 组合总和 ● 40.组合总和II ● 131.分割回文串

代码随想录刷题第二十七天

组合总和 (LC 39)

题目思路:

在这里插入图片描述

代码实现:

class Solution:
    def __init__(self):
        self.result = []
        self.path = []
        self.sum = 0
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        self.backtracking(candidates, target, 0)
        return self.result
    
    def backtracking(self, candidates, target, start_index):
        if self.sum > target:
            return
        if self.sum == target:
            self.result.append(self.path[:])
            return
        
        for i in range(start_index, len(candidates)):
            self.sum += candidates[i]
            self.path.append(candidates[i])
            self.backtracking(candidates, target, i)
            self.path.pop()
            self.sum -= candidates[i]

组合总和 II (LC 40) 去重,非常重要!!!

题目思路:

在这里插入图片描述

代码实现:

class Solution:
    def __init__(self):
        self.result = []
        self.path = []
        self.sum = 0
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        used = [0 for i in range(len(candidates))]
        candidates.sort()
        self.backtracking(candidates, target, 0, used)
        return self.result
    
    def backtracking(self, candidates, target, start_index, used):
        if self.sum > target:
            return
        if self.sum == target:
            self.result.append(self.path[:])
            return
        
        for i in range(start_index, len(candidates)):
            if i>0 and candidates[i-1] == candidates[i] and used[i-1] == 0:
                continue
            self.sum += candidates[i]
            self.path.append(candidates[i])
            used[i] = 1
            self.backtracking(candidates, target, i+1, used)
            used[i] = 0
            self.path.pop()
            self.sum -= candidates[i]

分割回文串 (LC 131)

题目思路:

在这里插入图片描述
在这里插入图片描述

代码实现:

class Solution:
    def __init__(self):
        self.result = []
        self.path = []

    def partition(self, s: str) -> List[List[str]]:
        self.backtracking(s, 0)
        return self.result

    def backtracking(self, s, startindex):
        if startindex>=len(s):
            self.result.append(self.path[:])
            return
        
        for i in range(startindex, len(s)):
            if self.ishuiwen(s, startindex, i):
                string = s[startindex:i+1]
                self.path.append(string)
            else:
                continue
            
            self.backtracking(s, i+1)
            self.path.pop()

    def ishuiwen(self, s, start, end):
        i = start
        j = end
        while(i<j):
            if s[i]!=s[j]:
                return False
            i+=1
            j-=1
        return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值