给定一组字符和长度的排列

Permutations given a set of characters and length

本文关键字:排列 字符 一组      更新时间:2023-10-16

这里的初学者程序员,只是想知道是否有更简单的方法来排列给定的字符集和用户给定的长度。 例如,长度为 3 的 A,B 将是:AAA、ABA、ABB、AAB、BBB、BAB、BAA。

此输出对应于整数 0..7(000,001、010 等)的二进制表示,因此您可以只制作最多2^N-1的 for 循环,用二进制表示循环计数器并用字符替换零和一。

对于较大的字符集(大小为M)也是如此 - 但您必须在M元系统中表示值0..M^N - 1(使用整数除法和余数)。伪代码:

for i = 0 to Power(M, N) - 1 do
// represent i in M-ary system:
tmp = i
for k = 0 to N - 1 do
digit[k] = tmp % M         //integer modulo
tmp = tmp / M              //integer division 

替代实现 - 使用旧电动计数器轮等方法遍历所有m^n值。蟒蛇演示代码:

src = "abc";
M = len(src)
N = 2
l = [0]*N
i = 0
while i < N:
print([src[x] for x in l])
i = 0
l[i] += 1
while (i < N) and l[i] >= M:
l[i] = 0
i += 1
if i < N:
l[i] += 1