生成C中n字母字母组合的总数

生成C中n字母字母组合的总数,c,algorithm,logic,C,Algorithm,Logic,我应该写一个逻辑来生成n字母单词的组合 例如,如果提供了数字2,我需要从a-z生成所有两个字母的单词,即: aa-ba-ca.....za ab-bb-cb.....zb . . . . az-bz........zz 我知道嵌套循环不足以解决这个问题,因为嵌套循环的数量随单词中字母的数量而变化。这让我转向递归,但我想不出逻辑。递归是这里的关键。下面是一个用Java编写的示例: public static void printCombos

我应该写一个逻辑来生成n字母单词的组合

例如,如果提供了数字2,我需要从a-z生成所有两个字母的单词,即:

    aa-ba-ca.....za
    ab-bb-cb.....zb
    .
    .
    .
    .
    az-bz........zz

我知道嵌套循环不足以解决这个问题,因为嵌套循环的数量随单词中字母的数量而变化。这让我转向递归,但我想不出逻辑。

递归是这里的关键。下面是一个用Java编写的示例:

public static void printCombos(int totalWords, String s) {
    if(totalWords-- <= 0) {
        System.out.print(s + " ");
        return;
    }
    for(char i = 'a'; i <= 'z'; i++)
        printCombos(totalWords, s + Character.toString(i));
    System.out.println();
}

两个字母有26^2个组合,三个字母有26^3个组合,依此类推,n个字母有-26^n个组合

因此,您可以为值0..26^n-1创建一个循环,并为每个循环计数器值构建相应的编码组合

类似Python的伪代码:

result = [""] * n
for i in range(26**n):
    t = i
    for k in range(n):
         digit = t % 26
         result[k] = letter[digit]   #"a" for 0, "b" for 1 etc
         t = t // 26 
    print(result)

这一课的重点是教你递归,它比迂腐的脸颊更有价值。。。但作为一个逆向投资者,如果你愿意的话,你完全可以用嵌套循环来实现这一点。你可以用一个不需要的循环

最多作废个字母(int n)
{
字符字[n];
int i=0;
for(字符字母='a';i
考虑如何在n=1时实现这一点。然后考虑如何在n=2时实现这一点,给出n=1的结果。然后将其扩展到一般意义上的n。为什么这个问题被标记为
语言不可知
,而在您在C中声明的
标题中?@GuyCoder title有
C
,但问题被标记为
Java
result = [""] * n
for i in range(26**n):
    t = i
    for k in range(n):
         digit = t % 26
         result[k] = letter[digit]   #"a" for 0, "b" for 1 etc
         t = t // 26 
    print(result)