---
# System prepended metadata

title: '#39 Combination Sum'
tags: [LeetCode, ' Top100']

---

---
title: "#39 Combination Sum"
tags: LeetCode, Top100
---
#39 Combination Sum
==
題目描述
--
Given an array of **distinct** integers ==candidates== and a target integer target, return *a list of all **unique combinations** of ==candidates== where the chosen numbers sum to* target. You may return the combinations in **any order**.

The **same** number may be chosen from ==candidates== an **unlimited number of times**. Two combinations are unique if the frequency of at least one of the chosen numbers is different.

It is **guaranteed** that the number of unique combinations that sum up to ==target== is less than ==150== combinations for the given input.

Example 1:
--
>Input: candidates = [2,3,6,7], target = 7
>Output: [[2,2,3],[7]]
>Explanation:
2 and 3 are candidates, and 2 + 2 + 3 = 7. Note that 2 can be used multiple times.
7 is a candidate, and 7 = 7.
These are the only two combinations.

解題思維
--
利用遞迴的性質，找出可能的組合，也不會有重複的可能。


Compare
--
```python
class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:

        result = []

        def getAnswer(i, target, out):
            if target < 0:
                return
            elif i >= len(candidates) and target > 0:
                return
            elif target == 0:
                result.append(out)
                return

            getAnswer(i, target-candidates[i], out+[candidates[i]])
            getAnswer(i+1, target, out)

        getAnswer(0, target, [])
        return result


```