2013-09-22 108 views
1

如果給定一組可能的移動和起始號碼,請在PhonePad上生成一個10位數電話號碼列表。偏移量的Java置換

的PhonePad
* 0#

可能的移動
相同數量的移動女王在棋可以在每個方向上(如此向北,南,東,西,東北,西北,東南,西南... n空間)

起始號碼:5

到目前爲止我已經實現了PhonePad作爲2維字符陣列中,實現的可能的移動一個大號可以在一個HashMap使(使用x和y的偏移量),並且我可以使女王使用其中一種可能的舉動移動一個正方形。

我的下一步是找出一個算法,它會給我所有的10位數字排列(電話號碼),使用我的HasMap中可能的移動。允許重複一個號碼。 *和#不允許在返回的電話號碼列表中。

我會想象與
起步 - 5555555555,5555555551,5555555552 ...等多達0,
- 5555555515,5555555155,5555551555 .. 5155555555 ..和與數字高達2 0
- 5555555151,5555551515,5555515155 .. 5151555555 ..和與數字高達2 0
......等了兩個數字的組合

上,以系統化的方法產生的10位數字的組合有什麼建議?即使是僞代碼算法,也是非常感謝!請告知我是否需要進一步澄清。

在此先感謝! :)

+1

這似乎是深度優先搜索問題(DFS)。請參閱:http://en.wikipedia.org/wiki/Depth-first_search –

回答

0

更詳細地,最簡單的方法將是一個遞歸方法,大致像:

  • 它接受一個前綴字符串最初是空的,電流數字(最初「5」),和多個數字生成(最初10)。
  • 如果位數是1,它將只輸出與當前數字連接的前綴。
  • 如果數字位數大於1,那麼它會列出所有可能的下一個數字,並以(前綴+(當前數字),下一位數字,(位數)-1)遞歸地調用自身作爲參數。

當然,其他的方法和改進也是可能的。 「輸出」操作可以寫入文件,添加到當前類或對象的字段中,或添加到將作爲結果返回的本地變量集合(List或Set)中。在最後一種情況下,(ndigits> 1)邏輯必須結合來自多個遞歸調用的結果才能獲得單個返回值。