본문 바로가기
Algorithm/집합 & 순열과 조합

[leetcode] combination sum

by akatapata 2022. 1. 17.

combination sum

  • 숫자 집합(candidates)과, target 숫자가 주어진다
  • 숫자 집합의 숫자를 조합해서 target이 되는 모든 경우를 나열
  • 숫자 집합의 원소를 여러번 사용할수 있다

solution

  • dfs를 통해서 작은 원소부터 cur에 하나씩 추가
  • target에 도달하면 결과값에 포함
  • target을 초과하는 경우에는 탐색 종료
  • 한 원소를 추가하면 다음 재귀 에서는 그 원소보다 작은 원소는 추가할수 없게 한다

code

class Solution(object):
    def combinationSum(self, candidates, target):

        candidates = sorted(filter(lambda x : x <= target,candidates))
        results = []
        def dfs(cur=[],elements=candidates):
            if sum(cur)==target:
                results.append(cur[:])
                return

            for i,el in enumerate(elements):
                # 가지 치기
                if sum(cur) + el > target : break
                cur.append(el)
                dfs(cur,elements[i:])
                cur.pop()
        dfs()
        return results

'Algorithm > 집합 & 순열과 조합' 카테고리의 다른 글

[leetcode] subset  (0) 2022.01.17
[leetcode] combinations  (0) 2022.01.13
[leetcode] permutations  (0) 2022.01.13
[leetcode] letter combinations of a phone number  (0) 2022.01.13