生成C中n字母字母组合的总数
我应该写一个逻辑来生成n字母单词的组合 例如,如果提供了数字2,我需要从a-z生成所有两个字母的单词,即:生成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
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)