【发布时间】:2008-09-19 14:51:37
【问题描述】:
我正在尝试编写一段代码来执行以下操作:
取数字 0 到 9 并为该数字分配一个或多个字母。例如:
0 = N,
1 = L,
2 = T,
3 = D,
4 = R,
5 = V or F,
6 = B or P,
7 = Z,
8 = H or CH or J,
9 = G
当我有一个像 0123 这样的代码时,对它进行编码就很容易了。它显然会构成代码 NLTD。当引入像 5,6 或 8 这样的数字时,情况会有所不同。像 051 这样的数字会导致不止一种可能性:
NVL 和 NFL
很明显,如果数字较长,包括 5,6 或 8 等多个数字,情况会变得更加“糟糕”。
由于数学很差,我还没有想出一个体面的解决方案,让我可以给程序输入一堆数字并让它吐出所有可能的字母组合。所以我很想得到一些帮助,因为我似乎无法弄清楚。挖掘了一些关于排列组合的信息,但没有运气。
感谢您提供任何建议/线索。我需要编写代码的语言是 PHP,但任何一般性提示都将受到高度赞赏。
更新:
更多背景知识:(非常感谢您的快速回复!)
我的问题背后的想法是构建一个脚本,该脚本将帮助人们轻松地将他们想要记住的数字转换为更容易记住的单词。这有时被称为“伪命理”。
我希望脚本为我提供所有可能的组合,然后将这些组合保存在剥离单词的数据库中。这些被删除的单词只是来自字典,并且我在问题中提到的所有字母都被删除了。这样,要编码的数字通常可以很容易地与一个或多个数据库记录相关联。当这种情况发生时,您最终会得到一个单词列表,您可以使用这些单词来记住您想记住的数字。
【问题讨论】:
-
这听起来确实是一个不错的面试问题。可以要求迭代和递归解决方案,看看这个人想出了什么。我必须记住这一点。 :)
-
这不公平,我的大脑在转圈时总是工作得更好更快。尤其是,天哪,又不是1:30了吧?是的,我该走了……
-
为什么似乎每个人都会自动跳到递归来解决这个问题?我是唯一一个认为递归对于这个问题来说是矫枉过正的人吗?
-
为什么递归是多余的?使用最好的工作工具,如果你可以制作一个完成工作的五行递归函数,有什么问题?我选择了它,因为通过递归而不是通过交互来查看问题时,我的大脑工作得更好。
-
对我来说,所有那些可以由 3 个循环处理的东西的堆栈帧似乎都过分了。但你是对的;对程序员最有意义的东西。我倾向于避免递归,除非无论如何我都需要一个堆栈进行回溯。迭代方法似乎不太容易出错并且更容易理解。
标签: algorithm unique combinations