题目1 电话号码的字母组合(17)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
代码:
# 递归思想
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
dic1={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
res = []
lending =len(digits)
if lending ==0:
return res
elif lending ==1:
return list(dic1[digits[0]])
else:
result = self.letterCombinations(digits[0:lending-1])
for i in result:
for j in dic1[digits[-1]]:
res.append(i+j)
return res
结果:
题目2 全排列(46)
给定一个没有重复数字的序列,返回其所有可能的全排列。
代码:
# 递归思想
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums) <= 1:
res=[]
for i in range(len(nums)):
list_one = self.permute(nums[0:i]+nums[i+1:])
for j in list_one:
res.append([nums[i]] + j)
return res
结果:
总结:
常用的数据结构,看似简单,却需要在例子中不断的加深理解,递归和动态规划更是不容易理解的,比较难掌握。这次编程训练增强了编程能力,至少提高了代码理解能力,自己写还是有困难,此外,对数据的类型理解深刻一些了,也会更注意一些,不然程序到处是错,跑不动。