题目大意:给你一个数组和一个目标值,要你算出用这个数组里面的数加起来等于目标值,总共有多少种组合方式。(每个数字可以重复使用)
方法:DP
class Solution {
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 num : nums) {
if (i >= num) {
dp[i] += dp[i - num];
}
}
}
return dp[target];
}
}
如果把题目改一下,改成不能重复使用数组中的数字。
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
dp[0] = 1;
for (int num : nums) {
for (int i = target; i >= num; i--) {
dp[i] += dp[i - num];
}
}
return dp[target];
}
}
网友评论