Giả sử chúng ta có ánh xạ ký tự như sau, mỗi chữ số từ 1 đến 9 ánh xạ tới vài ký tự.
1 -> ['A', 'B', 'C'] 2 -> ['D', 'E', 'F'] 3 -> ['G', 'H', 'I'] 4 -> ['J', 'K', 'L'] 5 -> ['M', 'N', 'O'] 6 -> ['P', 'Q', 'R'] 7 -> ['S', 'T', 'U'] 8 -> ['V', 'W', 'X'] 9 -> ['Y', 'Z']
Nếu chúng ta có một số, chúng ta phải thay thế các chữ số của nó bằng các ký tự tương ứng trong bảng ánh xạ và hiển thị tất cả các chuỗi được tạo. Chúng ta nên xem xét cùng một ký tự cho mọi lần xuất hiện của một chữ số trong số. Số cho trước sẽ không chứa 0.
Ví dụ, nếu đầu vào là [4,3,5], thì đầu ra sẽ là:
JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO
Giải pháp:
- out = [], temp = [], char_map = {}, index = 0
- Duyệt từng digit trong inp:
- Nếu digit chưa có trong char_map: char_map[digit] = index
- Xóa temp
- Với i từ 0 đến len(table[digit-1]):
- Nếu index==0: s = table[digit-1][i]; out.append(s)
- Nếu index>0: với mỗi string trong out: s = table[digit-1][i]; nếu char_map[digit] != index: s = string[char_map[digit]]; string += s; temp.append(string); nếu char_map[digit] != index: break
- Nếu index>0: out = temp.copy()
- index += 1
- Trả về out
Ví dụ
def findCombinations(inp, table):
out = list()
temp = list()
char_map = dict()
index = 0
for digit in inp:
if digit not in char_map:
char_map[digit] = index
temp.clear()
for i in range(len(table[digit - 1])):
if index == 0:
s = table[digit - 1][i]
out.append(s)
if index > 0:
for string in out:
s = table[digit - 1][i]
if char_map[digit] != index:
s = string[char_map[digit]]
string = string + s
temp.append(string)
if char_map[digit] != index:
break
if index > 0:
out = temp.copy()
index += 1
return out
mapping = [['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']]
inp = [4,3,5]
res = findCombinations(inp, mapping)
for it in res:
print(it, end=" ")
Đầu vào
[4,3,5]
Đầu ra
JGM KGM LGM JHM KHM LHM JIM KIM LIM JGN KGN LGN JHN KHN LHN JIN KIN LIN JGO KGO LGO JHO KHO LHO JIO KIO LIO