如何计算物品可组成的所有唯一组合数?以aabcc为例
嘿,这事儿其实挺简单的,核心是利用元素出现频率的乘积规则,就能轻松算出所有唯一组合数,咱们拿aabcc这个实例一步步说清楚:
第一步:统计每个元素的出现次数
先把序列里的重复元素归个类,数清楚每个元素到底出现了几次:
a:2次b:1次c:2次
第二步:确定每个元素的可选数量
对于每个元素来说,我们可以选择「不选它」「选1个」「选2个」……直到它的最大出现次数,所以每个元素的可选方案数是 出现次数 + 1(加的1是「不选」这个选项):
a的可选方案:0个、1个、2个 → 共3种b的可选方案:0个、1个 → 共2种c的可选方案:0个、1个、2个 → 共3种
第三步:计算总唯一组合数
把每个元素的可选方案数相乘,得到的就是包含空组合在内的所有唯一组合数:
3 * 2 * 3 = 18
如果题目要求的是非空组合(也就是必须至少选一个元素),那只要减去「空组合」这1种情况就行:
18 - 1 = 17
举几个例子验证下
比如从aabcc里能选出的组合:
- 单个元素:
a、b、c(虽然a有2个,但选1个a的组合是唯一的,不会重复统计) - 两个元素:
aa、ab、ac、bc、cc - 三个元素:
aab、aac、abc、acc、bcc - 四个元素:
aabc、aacc、abcc - 五个元素:
aabcc
再加上空组合,数下来正好是18种,非空的话就是17种,完全匹配计算结果。
内容的提问来源于stack exchange,提问作者lonewarrior556
相关产品推荐
相关产品推荐

