17. Letter Combinations of a Phone Number
GPT: 백트레킹
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
# 1. 숫자와 문자 매핑 정의
phone_map = {
"2": "abc", "3": "def", "4": "ghi", "5": "jkl",
"6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"
}
# 2. 결과 리스트 초기화
res = []
# 3. 입력이 빈 문자열인 경우 빈 리스트 반환
if not digits:
return res
# 4. 백트래킹 함수 정의
def backtrack(index, path):
# 4.1 조합이 완성되면 결과에 추가
if index == len(digits):
res.append("".join(path))
return
# 4.2 현재 숫자에 해당하는 문자 탐색
possible_letters = phone_map[digits[index]]
for letter in possible_letters:
# 선택 및 다음 단계 진행
path.append(letter) # 현재 문자 추가
backtrack(index + 1, path) # 다음 숫자로 이동
path.pop() # 현재 문자 제거 (백트래킹)
# 5. 백트래킹 시작
backtrack(0, [])
return res
GPT: BFS
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
# 1. 숫자와 문자 매핑 정의
phone_map = {
"2": "abc", "3": "def", "4": "ghi", "5": "jkl",
"6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"
}
# 2. 입력이 빈 문자열인 경우 빈 리스트 반환
if not digits:
return []
# 3. BFS를 위한 큐 초기화
queue = deque([""]) # 초기값은 빈 문자열
# 4. 각 숫자에 대해 처리
for digit in digits:
possible_letters = phone_map[digit] # 현재 숫자의 문자들
for _ in range(len(queue)):
combination = queue.popleft() # 현재 조합을 가져옴
for letter in possible_letters:
queue.append(combination + letter) # 새 조합을 큐에 추가
# 5. 최종 결과 반환
return list(queue)
https://youtu.be/0snEunUacZY?si=5iLG5JXFBOD7yD6C
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
digitToChar = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz',
}
res = [] # 결과를 저장할 리스트
# 백트래킹 함수 정의
def backtrack(i, curStr):
# 현재 조합의 길이가 입력된 숫자의 길이와 같으면 결과에 추가
if len(curStr) == len(digits):
res.append(curStr)
return
# 현재 숫자에 해당하는 문자들로 조합 생성
for c in digitToChar[digits[i]]:
backtrack(i + 1, curStr + c) # 다음 숫자로 이동
# 입력이 빈 문자열인 경우 빈 리스트 반환
if digits:
backtrack(0, "") # 백트래킹 시작
return res # 결과 반환
3차: 2024.12.26
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
res = []
digit_to_letters = {
'2': 'abc',
'3': 'def',
'4': 'ghi',
'5': 'jkl',
'6': 'mno',
'7': 'pqrs',
'8': 'tuv',
'9': 'wxyz',
}
# 백트래킹 함수 정의
def backtrack(curStr):
# 종료 조건: 현재 문자열 길이가 입력된 숫자 길이와 같으면
if len(curStr) == len(digits):
res.append(curStr) # 결과 리스트에 현재 문자열 추가
return # 재귀 종료
# 현재 숫자에 해당하는 문자들에 대해 반복
for c in digit_to_letters[digits[len(curStr)]]:
# 다음 문자 추가하여 백트래킹 재귀 호출
backtrack(curStr + c)
# 입력된 digits가 비어있지 않으면 백트래킹 시작
if digits:
backtrack("") # 초기 상태에서 빈 문자열로 시작
return res # 최종 결과 반환
이제.. 품
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
# 결과를 저장할 리스트
res = []
# 숫자와 해당 숫자에 매핑된 문자들
digit_to_letters = {
'2': 'abc', # 숫자 2는 'abc'로 매핑
'3': 'def', # 숫자 3은 'def'로 매핑
'4': 'ghi', # 숫자 4는 'ghi'로 매핑
'5': 'jkl', # 숫자 5는 'jkl'로 매핑
'6': 'mno', # 숫자 6은 'mno'로 매핑
'7': 'pqrs', # 숫자 7은 'pqrs'로 매핑
'8': 'tuv', # 숫자 8은 'tuv'로 매핑
'9': 'wxyz', # 숫자 9는 'wxyz'로 매핑
}
# 백트래킹 함수 정의
def backtrack(subset, idx):
# 기저 조건: 모든 숫자를 처리한 경우
if idx >= len(digits):
# 현재 생성된 문자 조합을 결과에 추가
res.append("".join(subset.copy()))
return
# 현재 숫자(digits[idx])에 매핑된 문자들을 순회
for sub in digit_to_letters[digits[idx]]:
# 현재 문자를 부분 조합(subset)에 추가
subset.append(sub)
# 다음 숫자를 처리하기 위해 재귀 호출
backtrack(subset, idx + 1)
# 상태 복구 (백트래킹)
subset.pop()
# 입력이 비어 있지 않은 경우에만 백트래킹 시작
if digits: # digits가 빈 문자열이면 백트래킹을 호출하지 않음
backtrack([], 0)
# 결과 리스트 반환
return res
'LeetCode > 주제별 보충' 카테고리의 다른 글
105. Construct Binary Tree from Preorder and Inorder Traversal (0) | 2024.12.11 |
---|---|
DFS: 100. Same Tree (0) | 2024.12.11 |
Graphs: 994. Rotting Oranges (0) | 2024.11.19 |
Graphs(Union Find): 547. Number of Provinces (0) | 2024.11.18 |
BST: 450. Delete Node in a BST (0) | 2024.11.18 |