#377

Combination Sum IV

Medium
ArrayDynamic ProgrammingDynamic ProgrammingBacktracking
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n^target)
O(n * target)
Space
O(target)
O(target)
💡

Intuition

Time O(n * target)Space O(target)

The optimal solution uses dynamic programming to build up the number of combinations for each target value from 0 to the desired target. This avoids redundant calculations and significantly improves efficiency.

⚙️

Algorithm

3 steps
  1. 1Step 1: Create a dp array of size target + 1 initialized to 0, with dp[0] = 1 (base case).
  2. 2Step 2: Iterate through each number from 1 to target.
  3. 3Step 3: For each number, iterate through the nums array and update the dp array based on previous results.
solution.py8 lines
1def combinationSum4(nums, target):
2    dp = [0] * (target + 1)
3    dp[0] = 1
4    for i in range(1, target + 1):
5        for num in nums:
6            if i - num >= 0:
7                dp[i] += dp[i - num]
8    return dp[target]

Complexity note: The time complexity is O(n * target) because we iterate through the target and for each target, we check all numbers in the nums array. The space complexity is O(target) due to the dp array.

  • 1The order of numbers in combinations matters, which is why we count sequences separately.
  • 2Using dynamic programming allows us to build solutions incrementally, reducing redundant calculations.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.