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
31 0
|
7月前
Leetcode 377. Combination Sum IV
赤裸裸的完全背包,属于动态规划的范畴,大家有兴趣可以在网上搜索下其他资料。个人觉得动态规划还是比较难理解的,更难给别人讲清楚,所以这里我直接附上我的代码供大家参考。
31 0
|
15天前
|
存储 算法 数据可视化
LeetCode 力扣题目:买卖股票的最佳时机 IV
LeetCode 力扣题目:买卖股票的最佳时机 IV
|
19天前
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
|
1月前
|
算法
leetcode代码记录(买卖股票的最佳时机 IV
leetcode代码记录(买卖股票的最佳时机 IV
24 2
|
1月前
|
SQL
leetcode-SQL-550. 游戏玩法分析 IV
leetcode-SQL-550. 游戏玩法分析 IV
32 1
|
1月前
|
Java
2454. 下一个更大元素 IV --力扣 --JAVA
给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数,你必须找到对应元素的 第二大 整数。 如果 nums[j] 满足以下条件,那么我们称它为 nums[i] 的 第二大 整数: j > i nums[j] > nums[i] 恰好存在 一个 k 满足 i < k < j 且 nums[k] > nums[i] 。 如果不存在 nums[j] ,那么第二大整数为 -1 。 比方说,数组 [1, 2, 4, 3] 中,1 的第二大整数是 4 ,2 的第二大整数是 3 ,3 和 4 的第二大整数是 -1 。 请你返回一个整数数组 answer ,其中 answer
45 1
2454. 下一个更大元素 IV --力扣 --JAVA
|
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