标签:tar tps for problems 返回 数组 i++ 组合 不同
题目描述:
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码;
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
dp[0] = 1;
for(int i = 1; i <= target; i++){
for(int j = 0; j < nums.length; j++){
if(i >= nums[j]){
dp[i] += dp[i - nums[j]];
}
}
}
return dp[target];
}
值得注意的是:
DP【i】是目标为i的组合个数
例如dp[5]=dp[1]+dp[4]+dp[2]+dp[3]
但这里会有个问题,假如数组nums中没有2,我们是没法用和为3的组合加上2的,因为这里根本就没有2可选。那我们能选的数字有哪些呢,其实就是数组nums中元素。所以上面的推理我们再来改一下
如果要求dp[i] 我们可以用和为i-nums[0]的组合再加上nums[0] 或者用和为i-nums[1]的组合再加上nums[1] 或者用和为i-nums[2]的组合再加上nums[2]
标签:tar tps for problems 返回 数组 i++ 组合 不同
原文地址:https://www.cnblogs.com/ash98/p/14701600.html