我想找到给定单词的所有可能组合。比如说,给定的单词是“the”然后我需要“t,h,e,teh ......”。我必须在groovy中找到这个,有什么方法吗?或者请告诉我算法的大纲。
答案 0 :(得分:6)
如果你也需要子集,你可以这样做:
("word" as List).subsequences()*.permutations().inject( [] ) { list, set ->
list.addAll( set )
list
}*.join().sort { it.length() }
,它提供以下输出:
[o,d,r,w,dw,wd,do,od,dr,rd, wr,rw,ow,wo,ro,或者,owd,wod,wdo, odw,dwo,dow,orw,owr,wor,wro, rwo,row,dor,ord,odr,rdo,rod, dro,wdr,rwd,drw,rdw,wrd,dwr, wrdo,orwd,wrod,wodr,ordw,wdor, rwod,wdro,word,owdr,rdow,卓尔, drwo,rdwo,odwr,dorw,odrw,dowr, dwro,rodw,dwor,owrd,rowd,rwdo]
修改:将set.each
更改为list.addAll
,因为它应该更快(并且阅读起来更容易)
答案 1 :(得分:3)
("word" as List).permutations()*.join()
将生成所有排列,不包括子集。每个可能子集的排列可以使用this。
更新阅读Tim的回答后,我可以想出这个:
("word" as List).subsequences()*.permutations().collect{ it*.join() }.flatten().sort{ it.length() }
(可能没有.sort{...}
)