代码随想录刷题day25

文章介绍了两道编程题的解决方案,分别是找出所有可能的数字组合使得它们的和等于给定的目标值(组合总和3),以及根据电话号码的数字生成所有可能的字母组合。解题方法均采用了回溯算法,有效地搜索所有可能的路径并进行剪枝优化。
摘要由CSDN通过智能技术生成
题目:组合总和3
题解:

1)注意剪枝操作和返回的逻辑
2)k, n可以选择动态更新

代码:
class Solution(object):
    def combinationSum3(self, k, n):
        """
        :type k: int
        :type n: int
        :rtype: List[List[int]]
        """

        res = []
        path = []
        # k = 2
        # n = 18

        def backtracking(k,n, startIndex):
            if n < 0:#剪枝操作
                return 
            if k==0:#这里的逻辑要注意,只要是元素个数达到了,即使求和未满足也应该停止。
                if n == 0:
                    res.append(path[:])
                return 
            for i in range(startIndex, 10 - k +1):#注意:这里的k表示还需要的元素个数
                path.append(i)
                backtracking(k - 1, n- i, i + 1)
                path.pop()
        backtracking(k, n, 1)
        return res
题目:电话号码的字母组合
题解:
代码:
class Solution(object):

    def __init__(self):
        self.result = []
        self.temp = ''
        self.num = {'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
    
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if not digits:
            return []
        self.backtracking(digits, 0)
        return self.result
        

    
    def backtracking(self, digits, index):
        if len(self.temp) == len(digits):
            self.result.append(self.temp)
            return 
        letters = self.num[digits[index]]##digits是一个字符串,竟然可以用索引值去寻找字符串内值
        for letter in letters:
            self.temp += letter
            self.backtracking(digits, index + 1)
            self.temp = self.temp[:-1]
        return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值