一.题目描述
给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。
示例:
nums = [1, 2, 3]
target = 4
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。
因此输出为 7。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二.思路
典型的动态规划,当前值跟前面的若干个值有关,有的动态规划是按照区间求解,这里是按照前面的特定的某些值求解,算是不同的一类,
递推式:f[i]=f[i-num] for num in nums
代码如下:
class Solution:
def combinationSum4(self, nums: List[int], target: int) -> int:
f=[0 for i in range(target+1)]
f[0]=1
for i in range(1,target+1):
for num in nums:
if i>=num:
f[i]+=f[i-num]
return f[target]