代码随想录算法训练营第26天| 216. 组合总和 III、17. 电话号码的字母组合

文章介绍了两个使用回溯算法解决的编程问题:一是找出所有可能的数字组合,使它们的和等于给定的目标值;二是给定一个电话号码,生成所有可能的字母组合。这两个问题都通过递归的回溯方法在Python中得到解决。
摘要由CSDN通过智能技术生成

216. 组合总和 III:


代码思路

class Solution:
    def combinationSum3(self, k: int, n: int) -> List[List[int]]:
        ans = []
        def bt(node, ans_lis, temp_sum):
            if temp_sum > n:
                return
            if temp_sum == n:
                if len(ans_lis) == k:
                    ans.append(ans_lis)
                else:
                    return
            for j in range(node+1, 10):
                bt(j, ans_lis+[j], temp_sum+j)
                if temp_sum+j > n:
                    break
        for i in range(1, 10):
            bt(i, [i], i)
        return ans

17. 电话号码的字母组合:


代码思路

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if digits == "":
            return []
        dic = {"2":'abc', "3":'def',"4":'ghi',"5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
        ans = []
        digits_list = list(digits)
        def bt(digit_index, ans_lis):
            if len(ans_lis) == len(digits):
                ans.append("".join(ans_lis))
                return
            
            for j in dic[digits_list[digit_index+1]]:
                bt(digit_index+1, ans_lis+[j])                
        
        for i in dic[digits_list[0]]:
            bt(0, [i])
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值