1

有一个关于在 PhonePad 上生成 10 位电话号码列表的问题,给定一组可能的动作和一个起始号码。

电话板
1 2 3
4 5 6
7 8 9
* 0 #

可能的移动
国际象棋中的皇后可以进行相同数量的移动(所以北,南,东,西,东北,西北,东南,西南......每个方向的n个空间)

起始编号:5

到目前为止,我已经将 PhonePad 实现为 2 维 char 数组,实现了女王可以在 HashMap 中进行的可能移动(使用 x 和 y 的偏移量),并且我可以使用可能的移动之一让女王移动一格.

我的下一步是使用 HasMap 中的可能移动找出一个算法,该算法将为我提供所有 10 位排列(电话号码)。允许重复数字。* 和 # 不允许在返回的电话号码列表中。

我想从 -5555555555、5555555551、55555555552
...等最多0, -555555555515、55555555155、55555551555 .. . 和数字 2 到 0 ... 以此类推,两位数的组合



关于生成 10 位数组合的系统方法有什么建议吗?即使是伪代码算法也值得赞赏!让我知道是否需要进一步澄清。

提前致谢!:)

4

1 回答 1

0

更详细地说,最简单的方法是递归方法,大致如下:

  • 它接受一个初始为空的前缀字符串、一个当前数字(初始为 '5')和要生成的多个数字(初始为 10)。
  • 如果位数为 1,它将简单地输出与当前位数连接的前缀。
  • 如果位数大于 1,那么它将列出所有可能的下一个数字,并以 (prefix + (current digit), next digit, (number of digits)-1 ) 作为参数递归调用自身。

当然,其他方法和对此方法的改进也是可能的。“输出”动作可以是写入文件,添加到当前类或对象中的字段,或者添加到将作为结果返回的局部变量集合(List 或 Set)。在最后一种情况下,(ndigits>1) 逻辑必须组合来自多个递归调用的结果以获得单个返回值。

于 2013-09-22T18:22:09.253 回答