题目:
思路
因为数字对应字母,我首先想到的就是字典,于是用字符串数字做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