leetcode 377-dp 不能用递归的排列组合

图片.png

C++:

////这个题递归会TLE 所以不可以
//void helper(vector&nums, int target, int& ans, int curSum) {
//  if (curSum == target) {
//      ans++;
//      return;
//  }
//  if (curSum > target)
//      return;
//  for (int i = 0; i < nums.size(); i++) {
//      helper(nums, target, ans, curSum + nums[i]);
//  }
//  return;
//}
//int combinationSum4(vector& nums, int target) {
//  int ans = 0;
//  helper(nums, target, ans, 0);
//  return ans;
//}

//其中dp[i]表示目标数为i的解的个数
int combinationSum4(vector& nums, int target) {
    vector dp(target + 1);
    dp[0] = 1;
    for (int i = 1; i <= target; ++i) {
        for (auto a : nums) {
            if (i >= a) 
                dp[i] += dp[i - a];
        }
    }
    return dp.back();
}

你可能感兴趣的:(leetcode 377-dp 不能用递归的排列组合)