组合总数(特定和)

一.题目描述

给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。

示例:

nums = [1, 2, 3]
target = 4

所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)

请注意,顺序不同的序列被视作不同的组合。

因此输出为 7。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二.思路

典型的动态规划,当前值跟前面的若干个值有关,有的动态规划是按照区间求解,这里是按照前面的特定的某些值求解,算是不同的一类,

递推式:f[i]=f[i-num] for num in nums

代码如下:

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        f=[0 for i in range(target+1)]
        f[0]=1
        for i in range(1,target+1):
            for num in nums:
                if i>=num:
                    f[i]+=f[i-num]
        return f[target]

 

### 组合与排列的概念及主要差异 #### 排列的定义 排列是指从给定数量的对象中取出定数量的对象并考虑其顺序的种方式。如果从 \( n \) 个不同的元素中选取 \( r \) 个元素,则这 \( r \) 个元素的不同排列总数为: \[ P(n, r) = \frac{n!}{(n-r)!} \] 其中,\( ! \) 表示阶乘运算[^1]。 #### 组合的定义 组合是从给定数量的对象中选出若干对象而不考虑它们的顺序的方式。同样地,从 \( n \) 个不同的元素中选取 \( r \) 个元素,则这 \( r \) 个元素的不同组合总数为: \[ C(n, r) = \frac{P(n, r)}{r!} = \frac{n!}{r!(n-r)!} \] 这里可以看到,组合实际上是排列的个子集,因为组合不关心所选元素的具体次序[^2]。 #### 主要差异 者的根本区别在于是否关注被选择对象的顺序: - **排列**强调的是对象的选择及其特定的安排; - **组合**仅涉及对象的选择而忽略具体如何安排这些对象。 下面给出个简单的例子来进步解释这概念上的差别。 假设有组三个字母 A、B C,并希望从中挑选个字母形成新的序列或集合。 ##### 对于排列的情况: 可能的结果有 AB、BA、AC、CA、BC CB 共计六个选项,这是因为每次不仅选择了哪个字符还决定了这个字符的位置关系。 ```python from itertools import permutations letters = ['A', 'B', 'C'] perm_result = list(permutations(letters, 2)) print(perm_result) ``` 上述代码展示了利用 Python 的 `itertools.permutations` 函数实现排列计算的过程[^3]。 ##### 对于组合的情况: 则只存在三种可能性即 {A,B}, {A,C} 及 {B,C} ,因为我们不再区分相同成员内部的不同位置情况。 ```python from itertools import combinations comb_result = list(combinations(letters, 2)) print(comb_result) ``` 此段脚本演示了借助 Python 中的 `itertools.combinations` 方法完成组合操作的方法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

skj1995

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值