赋予一组字符和长度的排列[关闭]

问题描述 投票:0回答:1

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

c++ algorithm cartesian-product
1个回答
1
投票

此输出对应于整数0..7(000,001,010等)的二进制表示,因此您可以将for循环设置为2^N-1,以二进制表示循环计数器并用零替换零和一些。

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

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值。 Python演示代码:

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
© www.soinside.com 2019 - 2024. All rights reserved.