위와 같이 candidates 안의 숫자를 이용하여 (중복 사용가능) target 숫자를 만들 수 있는 조합의 리스트를 출력하는 문제이다.
풀이방법
- candidates를 오름차순으로 정렬한다.
- 재귀함수인 recur 함수를 만들어서 숫자 조합을 만든다.
- t보다 candidates[i]가 작으면 다음 조합으로 넘어가고 아니면 리턴한다.
- for문은 자기 숫자부터 시작하므로 k라는 매개변수로 넘겨준다.
가장 중요했던 사실은 result.append(temp[:])였다.
result.append(temp)를 하면 temp주소를 넘겨주므로 이후 del temp, temp.append의 변화가 그대로 나타난다.
따라서 값 자체를 복사해주려면 [:]슬라이싱을 통해 전체를 복사해주어야 한다.
그래도 재귀함수를 통해 빠르게 풀 수 있어서 어려운 문제는 아니였다.
소스코드
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
result = []
temp = []
candidates.sort()
def recur(k,t):
for i in range(k,len(candidates)):
temp.append(candidates[i])
if t == candidates[i]:
result.append(temp[:]) ## 리스트 값 복사 붙여넣으려면 [:]슬라이싱 필요 !!!
#print("***",result)
del temp[-1]
return
elif t > candidates[i]:
recur(i,t - candidates[i])
del temp[-1]
elif t < candidates[i]:
del temp[-1]
return
recur(0,target)
return result
'Leetcode Top 100' 카테고리의 다른 글
42. Trapping Rain Water (0) | 2021.01.26 |
---|---|
41. First Missing Positive (0) | 2021.01.25 |
34. Find First and Last Position of Element in Sorted Array (0) | 2021.01.23 |
33. Search in Rotated Sorted Array (0) | 2021.01.21 |
32. Longest Valid Parentheses (0) | 2021.01.21 |