【发布时间】:2009-01-23 12:43:41
【问题描述】:
我有一个场景,我需要使用数字 2 到 9 生成所有可能的击键。可能的击键应该生成 2-git、3 位等最多 32 位数字。谁能告诉我解决这个问题的最佳方法是什么。
谢谢, 编辑
【问题讨论】:
我有一个场景,我需要使用数字 2 到 9 生成所有可能的击键。可能的击键应该生成 2-git、3 位等最多 32 位数字。谁能告诉我解决这个问题的最佳方法是什么。
谢谢, 编辑
【问题讨论】:
从一些简单的分析开始考虑可行性。一位数字有 8 个可能的值。两位数有 8 x 8。等等。现在拿起你的计算器计算 8 ^ 32。
【讨论】:
您正在考虑进行相当多的计算。
一种可能的方法是将数组作为数字序列的占位符,递增最高或最低索引,检查它是否溢出,然后将其“携带”到下一个索引并执行此操作直到你溢出“在另一端”的位置。从用 2 填充的数组开始。
【讨论】:
我会采用简单的递归方法,这里使用字符,但您也可以使用其他方式构建数字..
在 C 中:
#include <stdio.h>
void keystrokes(int x, int lo, int hi, char array[]) {
int i;
if (x > hi)
return;
if (x >= lo) {
array[x] = 0;
printf ("%s\n", array);
}
for (i = 2; i < 10; i++) {
array[x] = i+'0';
keystrokes (x+1, lo, hi, array);
}
}
int main(void)
{
char array[33];
keystrokes(0, 2, 32, array);
return 0;
}
可以稍微优化一下(例如,对于所有 32 位数字,它仍然会进行 10 次额外的递归调用),但仍然需要很长时间才能计算所有可能的组合。
【讨论】: