377. Combination Sum IV

Given an array of distinct integers nums and a target integer target, return the number of possible combinations that add up to target.

def combinationSum4_Iterative(nums: List[int], target: int):
    # minor optimization
    nums.sort()
    dp = [0 for i in range(target+1)]
    dp[0] = 1

    for comb_sum in range(target+1):

        for num in nums:
            if comb_sum - num >= 0:
                dp[comb_sum] += dp[comb_sum-num]
            # minor optimization, early stopping.
            else:
                break
    return dp[target]
       
def combinationSum4(self, nums: List[int], target: int):           
    @functools.lru_cache(maxsize = None)
    def recurse(n):                        
        if n == 0:
            return 1
       
        count = 0
        for i in nums:
            rem = n - i
            if rem >= 0:
                count += recurse(n-i)
            else:
                break               
        return count
   
    nums.sort()
    return recurse(target)

Comments

Popular posts from this blog

849. Maximize Distance to Closest Person

347. Top K Frequent Elements

139. Word Break