电话字母组合+全排列(dfs) python

要求:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:”23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].

class Solution(object):
    def letterCombinations(self, digits):
        phone = { '2':['a', 'b', 'c'],
                '3':['d', 'e', 'f'],
                '4':['g', 'h', 'i'],
                '5':['j', 'k', 'l'],
                '6':['m', 'n', 'o'],
                '7':['p', 'q', 'r', 's'],
                '8':['t', 'u', 'v'],
                '9':['w', 'x', 'y', 'z']}
        res = []
        length = len(digits)
        self.dfs("", 0, length, phone, digits, res)
        return res
    def dfs(self, combination, index, length, phone, digits, res):
        if length == index:
            res.append(combination)
            return
        for letter in phone[digits[index]]:
            self.dfs(combination+letter, index+1, length, phone, digits, res)
s = Solution()
m = s.letterCombinations('89')
print(m)

全排列

def permutation(ss):
    if len(ss)<=1 :
        return ss
    res = []
    dfs("", 0, len(ss), res, ss)
    return res
def dfs(combination, index, length, res, ss):
    if length == index:
        res.append(combination)
        return
    for i in range(len(ss)):
        if ss[i] not in ss[:i]:  #这一句可以实现去重,即'aaaa'这种只会打印一个
            dfs(combination+ss[i], index+1, length, res, ss[:i]+ss[i+1:])

ss1 = 'mpq'
res = permutation(ss1)
print(res)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值