Leetcode 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.

The answer is guaranteed to fit in a 32-bit integer.

Follow up: What if negative numbers are allowed in the given array? How does it change the problem? What limitation we need to add to the question to allow negative numbers?


Input: nums = [1,2,3], target = 4
Output: 7
Explanation:
The possible combination ways are:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
Note that different sequences are counted as different combinations.


Input: nums = [9], target = 3
Output: 0

  • Bu soruda bize liste olarak bir kaç sayı ve hedef(target) bir sayı veriliyor.
  • Bu listedeki sayılar ile kaç farklı şekilde hedef sayı elde edilebilir diye soruluyor.
  • Dp kullanarak bu soruyu çözebiliriz.
  • Input: nums = [1,2,3], target = 4 için
  • dp[0] = 1 başlayarak hedefteki sayıya gidebiliriz.
  • dp[1] = dp[1-1] + dp[1-2] +dp[1-3] sondaki ikisi zaten olmaz 0 sadece ilk dp [1-1] = dp[0] = 1
  • dp[2] = dp[2-1] + dp[2-2] +dp[2-3] sondaki olmaz 0 sadece ilk 2 durum için dp[1] + dp[0] = 2
  • dp[3] = dp[3-1] + dp[3-2] +dp[2-3] -> dp[2] + dp[1] + dp [0] = 2+1+1=4
  • dp[4] = dp[4-1] + dp[4-2] +dp[4-3] -> dp[3] + dp[2] + dp[1] = 4+2+1=7
class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp = {0:1}
        
        for total in range(1, target + 1):
            dp[total] = 0
            for n in nums:
                dp[total] += dp.get(total - n, 0)
        return dp[target]