2024.8.15 Python,回溯算法

1.电话号码的字母组合

示例 1:

输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:

输入:digits = “”
输出:[]
示例 3:

输入:digits = “2”
输出:[“a”,“b”,“c”]

class Solution:
	def letterCombinations(self, digits: str) -> List[str]:
		if not digits:
			return []
		n=len(digits)
		phone={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
		ans=[]
		def backtrack(i,tmp):
			if i==n:
				ans.append(tmp)
				return
			for letter in phone[digits[i]]
				backtrack(i+1,tmp+letter)
		backtrack(0,'')
		return ans

今天在火车上,就做了这么一道题,脑子其实没那么灵光,光看懂理清楚这个逻辑就废了好大劲,我现在还是没有完全想明白这个tmp的逻辑,哦,想明白了,我刚才的疑问是,tmp为什么不是一个列表,而是一个元素呢,是因为每一次循环和迭代,只产生一个元素,所以不存在好多个元素的情况。
n目的是确定号码长度,phone是字典表,如何调用字典我还是要去查,ans是空答案,新函数进去了以后if先不看,因为这个是后面的操作,其实这个代码是个循环套循环,我完全可以把backtrack写成一个循环,而不是一个函数,当i=0的时候,phone就有两种选择,之所以为了选择字典就是因为,digits[i]出来是字符而不是数字,所以要用字典去找,letter就有了三种可能,然后其中一个去加一,然后再进行tmp+letter,循环,然后就有了各种情况。我好像说的不是很清楚,还是得自己想。过几天再练一下这个逻辑。

2.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值