这是一个利用递归的例子.
- import java.util.*;
- public class Test{
- public static void main(String[] args) {
- System.out.println(permutation("abcde").length);
- System.out.println(Arrays.toString(permutation("abcde")));
- }
-
- private static String[] permutation(String orginal){
- ArrayList
-
- list = new ArrayList
-
- ();
- if(orginal.length() == 1){
- return new String[]{orginal};
- } else{
- for (int i = 0; i < orginal.length(); i++) {
- String s = orginal.charAt(i) + "";
- String result = "";
- String resultA = result + s;
- String leftS = orginal.substring(0, i) + orginal.substring(i + 1, orginal.length());
- for (String element : permutation(leftS)) {
- result = resultA + element;
- list.add(result);
- }
- }
- return (String[]) list.toArray(new String[list.size()]);
- }
- }
- }
-
-
- 结果:
- C:java>java Test
-
- 120
-
- [abcde, abced, abdce, abdec, abecd, abedc, acbde, acbed, acdbe, acdeb, acebd, ac
-
- edb, adbce, adbec, adcbe, adceb, adebc, adecb, aebcd, aebdc, aecbd, aecdb, aedbc
-
- , aedcb, bacde, baced, badce, badec, baecd, baedc, bcade, bcaed, bcdae, bcdea, b
-
- cead, bceda, bdace, bdaec, bdcae, bdcea, bdeac, bdeca, beacd, beadc, becad, becd
-
- a, bedac, bedca, cabde, cabed, cadbe, cadeb, caebd, caedb, cbade, cbaed, cbdae,
-
- cbdea, cbead, cbeda, cdabe, cdaeb, cdbae, cdbea, cdeab, cdeba, ceabd, ceadb, ceb
-
- ad, cebda, cedab, cedba, dabce, dabec, dacbe, daceb, daebc, daecb, dbace, dbaec,
-
- dbcae, dbcea, dbeac, dbeca, dcabe, dcaeb, dcbae, dcbea, dceab, dceba, deabc, de
-
- acb, debac, debca, decab, decba, eabcd, eabdc, eacbd, eacdb, eadbc, eadcb, ebacd
-
- , ebadc, ebcad, ebcda, ebdac, ebdca, ecabd, ecadb, ecbad, ecbda, ecdab, ecdba, e
-
- dabc, edacb, edbac, edbca, edcab, edcba]
-
-
-
复制代码
源码下载:http://file.javaxxz.com/2014/11/5/000226531.zip |