Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
偏移量的Java置换_Java_Algorithm_Permutation_Chess - Fatal编程技术网

偏移量的Java置换

偏移量的Java置换,java,algorithm,permutation,chess,Java,Algorithm,Permutation,Chess,在给定一组可能的移动和起始号码的情况下,有一个关于在电话板上生成10位数电话号码列表的问题 电话簿: 1 2 3 4.56 789 *0# 可能的移动: 一位皇后在国际象棋中可以做出的相同数量的棋步(所以北、南、东、西、东北、西北、东南、西南……每个方向有n个空格) 起始号码:5 到目前为止,我已经将PhonePad实现为一个二维字符数组,实现了Queen可以在HashMap中进行的可能移动(使用x和y的偏移量),并且我可以使用一种可能的移动使Queen移动一个正方形 我的下一步是找出一个算法,

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

电话簿:
1 2 3
4.56
789
*0#

可能的移动:
一位皇后在国际象棋中可以做出的相同数量的棋步(所以北、南、东、西、东北、西北、东南、西南……每个方向有n个空格)

起始号码:5

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

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

我可以想象从
开始 - 5555555555, 5555555551, 5555555552... 以此类推,最多0,
- 5555555515, 5555555155, 5555551555.. 5155555555.. 数字2最多为0
- 5555555151, 5555551515, 5555515155.. 5151555555.. 数字2最多为0
... 对于两位数的组合,依此类推

对生成10位数组合的系统方法有何建议?即使是伪码算法也值得赞赏!如果需要进一步澄清,请告诉我


提前感谢!:)

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

  • 它接受初始为空的前缀字符串、当前数字(初始为“5”)和要生成的数字数(初始为10)
  • 如果位数为1,它将只输出与当前数字连接的前缀
  • 如果位数大于1,则它将列出所有可能的下一位数,并以(前缀+(当前位数)、下一位数(位数)-1)作为参数递归调用自己

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

这似乎是一个深度优先搜索问题(DFS)。见: