练习
leetcode17
1)题目
2)做法
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
dict={'2':['a','b','c'],'3':['d','e','f'],'4':['g','i','h'],
'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}
result=[]
def menu(s,digits):
if len(digits)==0:
result.append(s)
else:
cur_digit=digits[0]
for element in dict[cur_digit]:
menu(s+element,digits[1:])
if not digits or len(digits)==0:
return result
menu('',digits)
return result
3)分析
在之前的学习中我们复习了递归和动态规划思想,在这里我们先用字典把数字和字母对应关系保存起来,
然后用递归来做,我们用s来记录结果,每次从digits里面取出一个数,找到他可能的element,加到s里面,digits长度减小直到长度为0
leetcode46
1)题目
2)做法
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res=[]
if len(nums)==0:
return []
if len(nums)==1:
return[nums]
for i in range(len(nums)):
ex_num=nums[i]
rest=nums[:i]+nums[i+1:]
for j in self.permute(rest):
res.append([ex_num]+j)
return res
3)分析
我们实际上是怎么做的,就是把第一个取出来之后,剩下的按照随意顺序组合。