题目:
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
算法:
方法一:动态规划
关键在于状态的划分。dp[i] 为元素和为i的元素组合个数。
dp[0]=dp[k - nums[i]], k == nums[i]时组合个数为1.
dp[i] =, k取值为[1,target]
func combinationSum4(nums []int, target int) int {
dp := make([]int, target + 1)
dp[0] = 1
sort.Ints(nums)
for k := 1; k <= target; k ++ {
for i := range nums {
if nums[i] > k {
break
} else if k >= nums[i] {
dp[k] = dp[k] + dp[k - nums[i]]
}
}
}
return dp[target]
}