1 题目描述
难度:中等
2 思路变迁
这道题一上来我就想着来个暴力扫描 直接穷举
结果不行 不是那么简单的 这道题在力扣上是中等难度
但是已经把我难住了 看看别人的解法 慢慢理解理解
编程的时候自己写了个图:帮助理解理解吧
具体思路都写在注释里啦
3 代码开搂
class Solution {
public int combinationSum4(int[] nums, int target) {
/*
* 看网上学到的dp数组
*/
//首先:
//dp[i]表示nums中能够组成i的组合的个数
//如题: nums组成4有7种 那么dp[4]=7
//其次:
//dp[i]满足性质:dp[i] = dp[i-nums[0]] + dp[i - nums[1]] +dp[i - nums[2]] + ···
//如题: dp[4] = dp[3] + dp[2] + dp[1] (3=4-1) (2=4-2) (1=4-3)
int[] dp = new int[target+1] ; //最后一个索引数是4 所以数组有4+1=5个元素
dp[0] = 1; //因为dp[1] = dp[0] 所以先把dp[0]定义好,为1
int i = 1;
for(;i<=target;i++){
for(int num:nums){
if(i >= num){
dp[i] += dp[i-num];
}
}
}
return dp[target];
}
}