看到这个题目直接用dfs 搜了一遍,但是没过,写法实在是丑陋,就想应该是可以dp,这里需要注意大小,就是target不会大于int 但是中途计算的过程会有大于int的。
class Solution {
public:
int combinationSum4(vector<int>& nums, int target) {
long long dp[1010] = {0};
dp[0] = 1; //如果是本身就是为1种方法
for(int i = 1;i <= target;++i)
{
for(int j = 0;j< nums.size();++j)
{
if(nums[j] <= i && dp[i] <= INT_MAX - nums[j]) //如果num_i 小于target_i,并且计算在int之内,dp[i] = dp[i] + dp[i - nums[j]]; dp[i] 的解应该是对应dp[i- num[j]]的和;
{
dp[i] += dp[i-nums[j]];
}
}
}
return dp[target];
}
};