【发布时间】:2021-08-26 07:59:13
【问题描述】:
我有一个包含 重复 个字符的数组。拿
['A','B','C','C'] 为例。我正在编写一个 C++ 程序来输出大小为 N 的所有组合。
当N = 2时,程序应输出AB、AC、BC和CC。
当N = 3时,程序应输出ABC、ACC、BCC。
我的方法是将数组中的每个字符视为唯一的。我生成了所有组合并将其保存到向量中。然后我遍历向量以删除重复的组合。
对于 N = 2,假设所有字符都是唯一的,则 4C2 = 6 种可能性:AB、AC、AC、BC、BC、CC。
1 AC 和 1 BC 被删除,因为它们出现两次而不是一次。
有没有更有效的方法来做到这一点?
注意:
- 数组中的字符不一定是升序。
- 在我最初的方法中,对向量使用 find() 不足以定位所有重复项。对于数组
['T','O','M','O','R','R','O','W'],重复排列。对于 N = 4,其中两个重复项是 TOMO 和 TMOO。
【问题讨论】:
-
给定链接中的程序似乎没有处理数组/向量中的重复元素。仍然会出现重复组合的问题。
-
相关但以 python 为中心的问题:python: Permutations with unique values。还有Python combinations without repetitions
-
@Stef 最后一个链接导致排列,但该文件包含
multiset_combinations更早