首页 > 其他分享 >377. 组合总和 Ⅳ(leetcode)

377. 组合总和 Ⅳ(leetcode)

时间:2024-09-03 19:36:57浏览次数:4  
标签:爬楼梯 target nums int leetcode 377 总和

https://leetcode.cn/problems/combination-sum-iv/description/

此篇题解解释了为什么不能直接用二维完全背包的方式做
不过还是建议把这个题当成一个爬楼梯来做

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        // f[i]表示若干数中选择,所能得到的值为i的个数(爬楼梯)
        // 以第i个数选择多少来划分子集
        // f[i] = f[i-nums[0]] + f[i-nums[1]] + f[i-nums[2]] + ... + f[i-nums[size-1]] 
        // f[0] = 1
        // 答案是f[target]
        unsigned int f[target+10];
        memset(f,0,sizeof f);
        f[0]=1; // 不选物品,能拿0的选法种数
        for(int j=0;j<=target;j++)
        {
            for(int i=0;i<nums.size();i++)
                if(j>=nums[i])
                    f[j]+=f[j-nums[i]];
        }
        return f[target];
    }
};

 

标签:爬楼梯,target,nums,int,leetcode,377,总和
From: https://www.cnblogs.com/lxl-233/p/18395267

相关文章

  • 算法:当一系列数据经过四舍五入后,总和不再等于100%时
    当一系列数据经过四舍五入后,总和不再等于100%时,这通常是由于四舍五入过程中产生的累积误差所导致的。为了处理这个问题,我们可以采用以下几种方法:1.重新分配误差步骤:计算四舍五入后总和与100%的差值。确定一个或多个需要调整的数据点,这些点可以是原始数据中相对不那么重要的......
  • 518. 零钱兑换 II(leetcode)
    https://leetcode.cn/problems/coin-change-ii/description/可以直接考虑用完全背包的传统二维做法classSolution{publicintchange(intamount,int[]coins){//题意就是一个完全背包问题//f[i][j]表示前i个数中选,体积等于j的最大选法种数,答案就......
  • LeetCode_0028. 找出字符串第一个匹配项的下标,KMP算法的实现
    题目描述  给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹......
  • 代码随想录算法训练营|Day01 LeetCode 704.二分查找,27.移除元素,977.有序数组的平方
    数组理论基础数组是存放在连续空间上的相同类型数据的集合数组的元素是不能删的,只能覆盖704.二分查找LeetCode:704.有序数组的平方classSolution{public:intsearch(vector<int>&nums,inttarget){intlength=nums.size();inti=0......
  • Java LeetCode练习
        LeetCodeExercise        807.保持城市天际线    题解:贪心        从左侧和右侧看,城市天际线等于矩阵grid的每一行的建筑物高度最大值;从顶部和底部看,城市天际线等于矩阵grid的每一列的建筑物高度最大值。只要不改变每一行和每一列......
  • 1049. 最后一块石头的重量 II(leetcode)
    https://leetcode.cn/problems/last-stone-weight-ii/description/思路较为巧妙的dp题,关键点在于如何将问题转化为01背包,有点贪心的思想主要是划分为两堆尽可能相等的石碓,然后判断能否凑出这个偏小的石碓(若干石头中选,能否选出这个价值)这里根据f[i]的定义可以有两种做法,1.f......
  • Leetcode——1.合并有序数组
    给你两个按非递减顺序排列的整数数组nums1_和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2_到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初......
  • 每日一题:Leetcode-224 基本计算器
    力扣题目解题思路java代码力扣题目:给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。示例1:输入:s="1+1"输出:2示例2:输入:s="2-1+2"输出:3示例3:输入:s......
  • 【LeetCode】两数之和
    题目:在数组中找到2个数之和等于给定值的数字,结果返回2个数字在数组中的下标。要求时间复杂度为 O(n)。解题分析:作者:halfrost链接:https://leetcode.cn/leetbook/read/leetcode-cookbook/5lu4og/顺序扫描数组,对每一个元素,在map中找能组合给定值的另一半数字,如果找......
  • Leetcode37-和相等的子数组(2395)
    1、题目给你一个下标从0开始的整数数组nums,判断是否存在两个长度为2的子数组且它们的和相等。注意,这两个子数组起始位置的下标必须不相同。如果这样的子数组存在,请返回true,否则返回false。子数组是一个数组中一段连续非空的元素组成的序列。示例1:输入......