https://leetcode.com/problems/combination-sum/description/

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        def backtrack(n=0, a=[], b=0):
            if b == target:
                l.append(a[:])
                return
            elif b > target:
                return
            

            for i in range(n, len(candidates)):
                a.append(candidates[i])
                b += candidates[i]

                backtrack(i, a, b)

                a.pop()
                b -= candidates[i]

        l = []
        backtrack()
        return l