回溯是一种通过穷举所有可能情况来找到所有解的算法。如果一个候选解最后被发现并不是可行解,回溯算法会舍弃它,并在前面的一些步骤做出一些修改,并重新尝试找到可行解。
leetcode:17. 电话号码的字母组合
问题描述:给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。给出数字到字母的映射。注意 1 不对应任何字母。
解法:如果没有剩余数字需要输入,则组合完成。如果还有数字需要输入,则遍历下一个数字对应的字母。当前字母添加到字符串中,s=s+letter
时间复杂度:
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
num = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
res = []
# 函数嵌套,不用写self
def find_letter(next_digits, s):
# 如果没有剩余数字需要输入,则组合完成
if len(next_digits) == 0:
res.append(s)
# 如果还有数字需要输入,则遍历下一个数字对应的字母
else:
for letter in num[int(next_digits[0])]:
# 当前字母添加到字符串中,s=s+letter
find_letter(next_digits[1:], s + letter)
# 空值处理
if digits:
find_letter(digits, '')
return res
leetcode:
问题描述:
解法:
时间复杂度:O(n)