在电话号码输入数字,输出他所有的单词组合。
解法 1
循环法,这里假设电话号码只有3位,那么可以使用3个for循环来进行输出。
c = ["","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"] # 分别代表着0,1,2,3,4,5,6,7,8,9
total = [0,0,3,3,3,3,3,4,3,4] # 分别代表着c中字母的数量
number = list(map(int, input().split()))
TelLength = len(number) # 电话号码的位数
answer = [0 for _ in range(TelLength)] # 表示数字目前代表的在C的相对位置,比如A为0,B为1,C为3
for answer[0] in range(total[number[0]]):
for answer[1] in range(total[number[1]]):
for answer[2] in range(total[number[2]]):
for i in range(3):
print(c[number[i]][answer[i]], end="")
print()
解法 2
将解法1进行改写,使其应用范围更广代码更简洁。
c = ["","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"] # 分别代表着0,1,2,3,4,5,6,7,8,9
total = [0,0,3,3,3,3,3,4,3,4] # 分别代表着c中字母的数量
number = list(map(int, input().split()))
TelLength = len(number) # 电话号码的位数
answer = [0 for _ in range(TelLength)] # 表示数字目前代表的在C的相对位置,比如A为0,B为1,C为3
while True:
# 输出数据
for i in range(TelLength):
print(c[number[i]][answer[i]], end="")
print()
k = TelLength - 1 #从最下层开始遍历
while k>=0:
if answer[k] < total[number[k]] - 1:#如果没有到达尾部,直接取
answer[k] += 1
break
else:
answer[k] = 0 # 该层的值变成第一位
k -= 1 #遍历上层
if k < 0:# 最上层也遍历完了
break
解法 3
采用递归的方法来进行改写解法1。
c = ["","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"] # 分别代表着0,1,2,3,4,5,6,7,8,9
total = [0,0,3,3,3,3,3,4,3,4] # 分别代表着c中字母的数量
number = list(map(int, input().split()))
TelLength = len(number) # 电话号码的位数
answer = [0 for _ in range(TelLength)] # 表示数字目前代表的在C的相对位置,比如A为0,B为1,C为3
def RecursiveSearch(numbre, answer, index, n):
if index == n:
for i in range(TelLength):
print(c[number[i]][answer[i]], end="")
print()
return
for answer[index] in range(total[number[index]]):
RecursiveSearch(numbre, answer, index+1, n)
RecursiveSearch(number, answer, 0, TelLength)