377. Combination Sum IV

1. Description

Given an array of distinct integers nums and a target integer target, return the number of possible combinations that add up to target.
The test cases are generated so that the answer can fit in a 32-bit integer.

2. Example

Example 1

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.

Example 2

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

3. Constraints

  • 1 <= nums.length <= 200
  • 1 <= nums[i] <= 1000
  • All the elements of nums are unique.
  • 1 <= target <= 1000

4. Solutions

Dynamic Programming

m = nums.size(), n = target
Time complexity: O(mn)
Space complexity: O(n)

class Solution {
public:
    int combinationSum4(const vector<int> &nums, int target) {
        vector<uint64_t> count(target + 1, 0);
        count[0] = 1;
        for (int sum = 1; sum <= target; ++sum) {
            for (int num : nums) {
                if (num <= sum) {
                    count[sum] += count[sum - num];
                }
            }
        }

        return count.back();
    }
};
comments powered by Disqus