@TOC
实战递归
LeetCode 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
tb = ('abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz')
class Solution:
def recursive(self, st, res):
if not st:
return res#边界条件,传入的按键数字字符串列表不为空,否则返回结果集
if not res:
res = ['']
res2 = []
cs = st.pop()#弹出第一个按键数字字符串
for c in cs:
res2 += [c+x for x in res]
return self.recursive(st, res2)#递归,返回结果集
def letterCombinations(self, digits):
st = [tb[int(x)-2] for x in str(digits)]#输入的数字减2是列表的下标
res = []
return self.recursive(st, res)#传入按键字符串列表和结果集
LeetCode 46. 全排列
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class Solution(object):
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
def backTracking(n):
if n==0:
ret.append(nums.copy())
else:
for i in range(n+1):
nums[i],nums[n] = nums[n],nums[i]
backTracking(n-1)
nums[i],nums[n] = nums[n],nums[i]
ret = []
backTracking(len(nums)-1)
return ret