题目描述:
见: https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
代码:
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if not digits:
return []
mapping = {
'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'}
res = [c for c in mapping[digits[0]]]
for d in digits[1:]:
res = [prev + cur for prev in res for cur in mapping[d]]
return res
从下到上的循环思路分析:
字符串中可能会有多个数字,假设我们一个一个地将其中的数字取出。当取第一个数字时,可能会有三个或四个组合。然后当我们取第二个数字时,做一个全排列即可。关键是从第三个数字开始,每一个新来的数字都可以用到前面的结果,这样就避免了大量的重复。
网友评论