문제 링크
https://leetcode.com/problems/combinations/
나의 풀이
소스 코드
from typing import List
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
def dfs(num=1, comb=[]):
if len(comb) == k:
result.append(comb)
return
for curr in range(num, n + 1):
copied = comb[:]
copied.append(curr)
dfs(curr + 1, copied)
result = []
dfs()
return result
문제 풀이
k
개 조합 생성
1. DFS로 소스 코드
from typing import List
class Solution1:
def combine(self, n: int, k: int) -> List[List[int]]:
results = []
def dfs(elements, start: int, k: int):
if k == 0:
results.append(elements[:])
# 자신 이전의 모든 값을 고정하여 재귀 호출
for i in range(start, n + 1):
elements.append(i)
dfs(elements, i + 1, k - 1)
elements.pop()
dfs([], 1, k)
return results
itertools
모듈 사용
2. 소스 코드
from typing import List
import itertools
class Solution2:
def combine(self, n: int, k: int) -> List[List[int]]:
# 리트코드에서는 리스트 반환 문제도 튜플로 반환하면 정답으로 처리되므로
# 아래와 같이 작성해도 문제는 없음
# return list(itertools.combinations(range(1, n + 1), k))
return list(map(list, itertools.combinations(range(1, n + 1), k)))