Giả sử chúng ta có một ánh xạ ký tự như sau, ở đây mỗi chữ số, từ 1 đến 9, ánh xạ đến một 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 đổi các chữ số của nó bằng các ký tự tương ứng trong danh sách ánh xạ đã cho 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 sẽ không chứa 0.
Vì vậy, 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 quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- out:=một danh sách mới
- temp:=một danh sách mới
- char_map:=một bản đồ mới
- chỉ mục:=0
- đối với mỗi chữ số trong inp, hãy thực hiện
- nếu chữ số không có trong char_map, thì
- char_map [digit]:=index
- xóa danh sách tạm thời
- đối với tôi trong phạm vi từ 0 đến kích thước của bảng [chữ số - 1], hãy thực hiện
- nếu chỉ mục giống 0, thì
- s:=table [digit - 1, i]
- chèn s ở cuối đoạn văn bản
- nếu chỉ mục> 0 thì
- đối với mỗi chuỗi ra, hãy thực hiện
- s:=table [digit - 1, i]
- nếu char_map [chữ số] không giống như chỉ mục, thì
- s:=string [char_map [digit]]
- string:=string concatenate s
- chèn chuỗi vào cuối tạm thời
- nếu char_map [chữ số] không giống như chỉ mục, thì
- s:=table [digit - 1, i]
- nếu char_map [chữ số] không giống như chỉ mục, thì
- break
- đối với mỗi chuỗi ra, hãy thực hiện
- nếu chỉ mục> 0, thì
- out:=một bản sao tạm thời
- index:=index + 1
- nếu chỉ mục giống 0, thì
- quay trở lại
- nếu chữ số không có trong char_map, thì
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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