生成长度最大为n的n个字符的所有组合(不是所有排列)

时间:2016-06-27 11:18:12

标签: algorithm matlab loops if-statement combinations

我们如何以递增的长度顺序生成长度为1到n的n个字符的所有可能组合?

例如:如果n = 4且字符为1,2,3,4 我们需要生成一个数组

1,2,3,4
12,13,14,23,24,34
123, 124, 134, 234
1234

这里n是变量,用户可以输入n个字符。

1 个答案:

答案 0 :(得分:0)

最多n个元素的组合与长度为n的位掩码之间存在双射。解决问题的一种方法是生成长度为n的所有位集,并按它们所在的位数对它们进行排序。您可以使用bucket sort

创建与0到n之间的数字对应的n+1列表。然后迭代所有位掩码,并为每个位掩码计算其中1的位数,然后在相应的列表中添加位掩码。使用这些列表,解决问题应该很容易。