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 test cases are generated so that the answer can fit in a 32-bit integer.
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: 0Constraints:
1 <= nums.length <= 2001 <= nums[i] <= 1000All the elements of
numsare unique.1 <= target <= 1000
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?
Solution:
Version 1: DP
backPack VI 和combination sum IV是同一题 本质上是背包问题,但是和BP IV又不一样,因为同一组数可以组成不同的组合 比如1, 1, 2和1, 2, 1在本题是两个解,所以j循环要放在外面,使得相同的一组数 有可能出现在不同的结果中
典型的完全背包问题(518. Coin Change 2)。 如果 数相同 顺序不同 被认为是 不同 的答案,那么就先循环背包容量,再循环物品。 如果 数相同 顺序不同 被认为是 相同 的答案,那么就先循环物品,再循环背包容量。
所以只要把(BP IV)中j循环翻出来即可: BP IV: for num in nums: for j in range(num, target + 1): dpj += dpj - num
BP VI: for j in range(1, target + 1): for num in nums: if num > j: continue dpj += dpj - num
Version 2: Top down dfs+ memorization search (similar as other combination sum)
Last updated
Was this helpful?