题目描述:
标签:动态规划
给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
题目数据保证答案符合 32 位整数范围。
代码:
思路分析:动态规划五部曲(完全背包问题)——求排列
1、确定dp数组以及下标的含义——这里dp[i]是指背包重量是i,凑成该重量的方法数
2、确定递推公式,典型背包公式递推,dp[i] += dp[i-nums[j]]——一维,滚动数组(说真的我没有理解这个公式)
3、dp数组初始化,dp[0]=1,不放东西也是一种方法
4、确定遍历顺序,双层for循环遍历,i从0到target(遍历所有重量),j从0到nums.length
5、举例推导dp数组
6、最后返回dp[target]
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] >= 0){
dp[i] += dp[i - nums[j]];
}
}
}
return dp[target];
}
}