c# – 将字符串分解并重新排列为所有可能的组合
我想分解并重新排列一个字符串到所有可能的组合
说我有一个字符串:ABCDEF 我想将其分解并输出所有可能的组合 组合(6,6)= 1 ABCDEF 组合(6,5)= 6 BCDEF ACDEF ABDEF ABCEF ABCDF ABCDE 组合(6,4)= 15 BCDE ACDE ABDE ABCE .... .... .... etc. 组合(6,3)= 20 BCD ACD ... etc. 组合(6,2)= 15 但是,ouptut也必须按字母顺序排列. 我该怎么做? 谢谢!任何帮助将不胜感激! 解决方法
您可以从Knuth Volume 4,Fascicle 3获得算法(实际上是其中一些),但您必须将其从数学符号转换为C#.
更新:当我更多地考虑这个问题时,分册2(生成排列)实际上更有帮助.您可以从http://www-cs-faculty.stanford.edu/~knuth/fasc2b.ps.gz免费下载它,但您需要使用gunzip和PostScript预览器来阅读它.生成字符串“ABCDE”的子集是很容易的部分.将其转换为数组{‘A’,’B’,’C’,’D’,’E’},运行从0到2 ^ N-1的for循环,其中N是数组长度,并处理每个值作为你要保留的元素的位掩码.因此00001,00010,00011,…给你“A”,“B”,“AB”,…… 困难的部分是生成每个子集的所有排列,因此你得到“ABC”,“BAC”,“CAB”等.强力算法(如在其他答案之一中)将起作用但如果非常慢,如果字符串很长. Knuth有一些快速算法,如果首先对原始字符串进行排序,其中一些将按字母顺序生成排列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |