leetcode 377 组合总和IV

简介: leetcode 377 组合总和IV

组合总和IV


15a6e56421234cbb9e15ec2d55dcdb3a.png

回溯法(超时)

class Solution {
public:
    int result = 0;
    void backtracking(vector<int>& nums , int target , int sum)
    {
        if(sum == target) result++;
        if(sum >= target) return;
        for(int i=0 ;i<nums.size() ;i++)
        {
            backtracking(nums,target,sum+nums[i]);
        }
        return;
    }
    int combinationSum4(vector<int>& nums, int target) {
       backtracking(nums,target,0);
       return result;
    }
};

动态规划

和518零钱兑换II 的区别是

  • 518零钱兑换II 是组合数,有多少种组合
  • 此题是找排序数

如果求组合数就是外层for循环遍历物品,内层for遍历背包。
如果求排列数就是外层for遍历背包,内层for循环遍历物品。


dace93e61ebf4b1dacce139bcd0bcc6a.png

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
       vector<int> dp(target+1 ,0);
       dp[0] = 1;
        for(int j=0 ; j<=target ;j++)
        {
            for(int i=0 ; i<nums.size() ;i++)
            {
                if(j>=nums[i] && dp[j] < INT_MAX - dp[j-nums[i]])
                {
                  dp[j] += dp[j-nums[i]];
                } 
                else dp[j] = dp[j];
            }
        }
       return dp[target];
    }
};

C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[i] < INT_MAX - dp[i - num]。

二刷

如果求组合数就是外层for循环遍历物品,内层for遍历背包。
如果求排列数就是外层for遍历背包,内层for循环遍历物品。

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        vector<int> dp(target+1 , 0);
        dp[0] = 1;
        for(int j=0 ; j<=target ; j++)
        {
            for(int i=0 ; i<nums.size() ; i++)
            {
                if(j>=nums[i] && dp[j]  <= INT_MAX - dp[j-nums[i]])
                    dp[j] += dp[j-nums[i]];
            }
        }
        return dp[target];
    }
};
相关文章
|
1月前
leetcode-1345:跳跃游戏 IV
leetcode-1345:跳跃游戏 IV
30 0
|
7月前
Leetcode 377. Combination Sum IV
赤裸裸的完全背包,属于动态规划的范畴,大家有兴趣可以在网上搜索下其他资料。个人觉得动态规划还是比较难理解的,更难给别人讲清楚,所以这里我直接附上我的代码供大家参考。
29 0
|
6天前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 IV
LeetCode 力扣题目:买卖股票的最佳时机 IV
|
10天前
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
|
1月前
|
算法
leetcode代码记录(买卖股票的最佳时机 IV
leetcode代码记录(买卖股票的最佳时机 IV
22 2
|
1月前
代码随想录Day42 动态规划10 LeetCode T123 买卖股票的最佳时机III T188买卖股票的最佳时机IV
代码随想录Day42 动态规划10 LeetCode T123 买卖股票的最佳时机III T188买卖股票的最佳时机IV
38 0
|
1月前
|
测试技术
代码随想录 Day37 完全背包理论基础 卡码网T52 LeetCode T518 零钱兑换II T377 组合总和IV
代码随想录 Day37 完全背包理论基础 卡码网T52 LeetCode T518 零钱兑换II T377 组合总和IV
39 0
|
1月前
|
缓存 算法 测试技术
【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV
【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV
|
1月前
leetcode-6111:螺旋矩阵 IV
leetcode-6111:螺旋矩阵 IV
25 0
|
1月前
|
SQL
leetcode-SQL-550. 游戏玩法分析 IV
leetcode-SQL-550. 游戏玩法分析 IV
28 1