偏移量的 Java 排列

标签 java algorithm permutation chess

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

PhonePad:
1 2 3
4 5 6
7 8 9
* 0 #

可能的 Action :
国际象棋中女王可以走的步数相同(所以北、南、东、西、东北、西北、东南、西南……每个方向 n 个空格)

起始编号:5

到目前为止,我已经将 PhonePad 实现为二维字符数组,在 HashMap 中实现了 Queen 可以进行的可能移动(使用 x 和 y 的偏移量),并且我可以使用以下方法之一让 Queen 移动一个方格可能的 Action 。

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

我会想象从
开始 - 5555555555, 5555555551, 5555555552...等等直到0,
- 5555555515、5555555155、5555551555.. 5155555555.. 以及数字 2 到 0
- 5555555151、5555551515、5555515155.. 5151555555.. 以及数字 2 到 0
... 以此类推两位数组合

关于生成 10 位数字组合的系统方法有什么建议吗?即使是伪代码算法也值得赞赏!如果需要进一步说明,请告诉我。

提前致谢! :)

最佳答案

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

  • 它接受一个最初为空的前缀字符串、一个当前数字(最初为“5”)和要生成的数字数量(最初为 10)。
  • 如果位数为 1,它将简单地输出与当前数字连接的前缀。
  • 如果数字的个数大于 1,那么它将列出所有可能的下一个数字,并以(前缀+(当前数字),下一个数字,(数字的数字)-1)作为递归调用自己论点。

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

关于偏移量的 Java 排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946983/

相关文章:

c++ - 在 C++ 中获取所有排列的最有效方法

algorithm - 基于相似词序列的聚类字符串

r - (速度挑战)根据通用汉明距离计算距离矩阵的任何更快的方法?

java - 无法通过intellij运行配置直接运行 cucumber 功能

从 Python 调用 Java,无需加载类路径

algorithm - kruskal 算法的性能如何受到不相交集数据结构的影响?

algorithm - 如何为每个 n 构造一个算术自由排列?

c - 获取数字数组的第 i 个组合

java - Spring 安全过滤器验证成功但发回 403 响应

java - java switch case 中的常量表达式 require (字段是最终的并已初始化)