给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
题解
本题为排列问题
排列问题和组合问题区别参考零钱兑换问题II
//只用求个数不用求具体的组合,用dp(完全背包(排列数))
//排列数:容量在外,遍历顺序从低到高 物品在内,遍历顺序从低到高
//1.定义:dp[j]:总和为target的排列总数
//2.动态转移方程 dp[j]+=dp[j-nums[i]] dp=new int[target+1]
//3.初始化 dp[0]=1 表示使得容量为0的方案有1种,即什么数都不选
//4.遍历顺序 容量在外,遍历顺序从低到高 物品在内,遍历顺序从低到高
//5.返回值 dp[target]
class Solution {
public int combinationSum4(int[] nums, int target) {
int[] dp=new int[target+1];
dp[0]=1;
for(int j=0;j<=target;j++){
for(int i=0;i<nums.length;i++){
if(j>=nums[i]) dp[j]+=dp[j-nums[i]];
}
}
return dp[target];
}
}