[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을 반환하면 순열들을 리스트 형태로 원소로 가진 리스트가 반환 됨
