力扣第17题“电话号码的字母组合”(python解决)

题目:

思路

因为数字对应字母,我首先想到的就是字典,于是用字符串数字做key,对应的字母字符串做key_value,但是怎么取出这些字母字符串的单个字母,最好每个数字对应一个单个字母的列表,类似于2:["a","b","c"]这种,于是先选出单个字母字符串,再循环取其单个字母放入列表,再将这列表放入新的列表形成[["a",“b”,"c"],["d","e","f"]]这样的二维列表

原列表每个字母与新列表的每个字母组合,例如a与efg分别遍历,b也是,c也是,合成的新列表再作为原列表,重复以上步骤。

代码:

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if digits =="":
            return []
        length = len(digits)
        ting_dict={'2':"abc",'3':"def",'4':"ghi",'5':"jkl",'6':"mno",'7':"pqrs",'8':"tuv",'9':"wxyz"} 
        templist_keyvalue = [] #存放键值的列表
        temp_str = []          #存放单个字母组成的列表[["a","b","c"],["d","e","f"]]
        templist_single_str = [] #存放单个字母的列表["a","b","c"]
        N_temp = []               #用于做中间存储的
        for str_num in digits:
            templist_keyvalue.append(ting_dict[str_num]) #取出每个数字对应的键值
        for str_value in templist_keyvalue:              #取出每个键值的单个字母
            for str_sigle in str_value:
                templist_single_str.append(str_sigle)    #用templist_single_str列表保存每个字符串的所有字母
            temp_str.append(templist_single_str[::])    #用temp_str保存,用[::]是防止原列表改变,这里也改变(深浅拷贝的问题)
            templist_single_str.clear() #如果上面不要[::],这里清空,temp_str也会清空                 
        tempstr_0 = temp_str[0]       
        i = 1

        while i < length:
            tempstr_i = temp_str[i]  
            i_length = len(tempstr_i)
            for k in tempstr_0:
                for j in tempstr_i:
                    N_temp.append(k+j)
            tempstr_0.clear() #将tempstr_0清空
            tempstr_0.extend(N_temp) #将生成的新列表加入其中(这里拷贝的是元素,不是地址)
            N_temp.clear() #清空N_temp,不影响tempstr_0中的元素
            i +=1
        return tempstr_0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值