[leetcode / 77] Combinations
in Problem Solving on leetcode
날짜: 2021년 8월 30일
카테고리: 그래프
태그: Medium
, 77
, 파이썬
입출력 예시
예제 입력 | 예제 출력 |
---|---|
n = 4, k = 2 | [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]] |
n = 1, k = 1 | [[1]] |
코드
class Solution:
def combine(self, n, k):
answer = list()
def dfs(elements, start, k):
if k == 0:
answer.append(elements[:])
return
for i in range(start, n + 1):
elements.append(i)
dfs(elements, i + 1, k - 1)
elements.pop()
dfs([], 1, k)
return answer
풀이 과정
전반적인 흐름은 이전의 순열 문제와 같다
answer
리스트 생성
dfs
중첩 함수 생성
- 만약
k
가 0이라면answer
리스트에elements
리스트를 원소로 추가 후 반환- (파이썬은 모든 객체를 참조하는 형태로 처리되므로 얕은 복사를 위해
[:]
를 붙여준다.)
- (파이썬은 모든 객체를 참조하는 형태로 처리되므로 얕은 복사를 위해
start
부터n+1
까지 반복을 하는데elements
리스트에에i
를 추가하고elements
에 대하여i+1
부터k-1
까지의dfs
함수를 재귀elements
의 원소를 pop
빈 리스트에 대하여 1부터 k
까지의 dfs
함수 호출
answer
을 반환하면 순열들을 리스트 형태로 원소로 가진 리스트가 반환 됨