377.组合总和 Ⅳ

56 阅读1分钟

题目:
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。
算法:
方法一:动态规划
关键在于状态的划分。dp[i] 为元素和为i的元素组合个数。 dp[0]=dp[k - nums[i]], k == nums[i]时组合个数为1. dp[i] =idx=1ndp[knums[idx]]\sum_{idx=1}^{n}dp[k - nums[idx]], 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]
}