Leetcode 17. 电话号码的字母组合 46. 全排列

27 篇文章 0 订阅
12 篇文章 1 订阅

@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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值