拿到这道题的时候思路其实很简单,无非就是输入数字,按照九键中的数字对应字母,进行排列组合,但是然后我的思路卡壳了一下,因为,首先你不知道它输入几个数,所以你并不知道他是几个字母列表进行排列组合,可能这就是这道题唯一的难点了。
思路:运用队列先入先出的规则,首先,用队列储存输入的数字,然后每次都认为是两个列表进行两两配对组合,这句话你们看得可能有点蒙,下面我举个例子:
假设我输入“23”
那这个时候他本来的存储结果的数组为[]空数组,队列取出一个2,和这个空数组进行配对组合,结果为【a,b,c】
再从队列中取出一个3,和这个结果列表进行组合,结果为【ad,ae,af,bd,be,bf,cd,ce,cf】
import queue
from typing import List
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
letter = [['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'],['m','n','o'],['p','q','r','s'],['t','u','v'],['w','x','y','z']]
result = []
number = queue.Queue()
for i in range(0,len(digits)):
number.put(digits[i])
while(not number.empty()):
temp = letter[int(number.get())-2]
if result == []:
result = temp
else:
re = []
for i in result:
for j in temp:
re.append(i+j)
#print(i+j)
result = re
return result
strs = '234'
a = Solution().letterCombinations(strs)
print(a)