1.题目描述:
给你一个由不同整数组成的数组nums,和一个目标整数target。请你从nums中找出并返回总和为target的元素组合的个数。题目数据保证答案符合32位整数范围。
2.动态规划:
与leetcode518. 零钱兑换 II类似,完全背包问题,但是从组合问题转变成了排列问题,只需要将背包的遍历放在外循环,物品的遍历放在内循环即可。
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp = new int[target + 1];
dp[0] = 1;
for (int i = 0; i <= target; i++) {//先遍历背包再遍历物品
for (int j = 0; j < nums.length; j++) {//初始化也略有不同
if (i >= nums[j]) dp[i] += dp[i - nums[j]];
}
}
return dp[target];
}
}