Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 숫자의 숫자에 매핑된 문자로 구성된 모든 문자열 찾기

<시간/>

다음과 같은 문자 매핑이 있다고 가정합니다. 여기에서 1에서 9까지의 각 숫자는 소수의 문자에 매핑됩니다.

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']

숫자가 있는 경우 지정된 매핑 목록의 해당 문자로 숫자를 변경하고 생성된 모든 문자열을 표시해야 합니다. 숫자에서 숫자가 나타날 때마다 동일한 문자를 고려해야 합니다. 주어진 숫자는 0을 포함하지 않습니다.

따라서 입력이 [4,3,5]와 같으면 출력은

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

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • out :=새 목록
  • temp :=새 목록
  • char_map :=새 지도
  • 색인:=0
  • inp의 각 숫자에 대해 다음을 수행합니다.
    • 숫자가 char_map에 없으면
      • char_map[숫자] :=색인
    • 임시 목록 지우기
    • 0에서 테이블[digit - 1]의 크기 범위에 있는 i에 대해
      • 인덱스가 0이면
        • s :=테이블[숫자 - 1, i]
        • 끝에 s 삽입
      • 인덱스> 0이면
        • 출력되는 각 문자열에 대해 다음을 수행합니다.
          • s :=테이블[숫자 - 1, i]
            • char_map[digit]이 인덱스와 같지 않으면
              • :=문자열[char_map[숫자]]
            • 문자열 :=문자열 연결 s
            • temp의 끝에 문자열 삽입
        • char_map[digit]이 인덱스와 같지 않으면
          • 중단
      • 인덱스> 0이면
        • out :=임시 사본
      • 인덱스 :=인덱스 + 1
    • 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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=" ")

입력

[4,3,5]

출력

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