java 全排列算法;

Python019

java 全排列算法;,第1张

= =~思路什么的...用递归吧:

package mon_11

import java.util.HashSet

public class ArrangeAll {

private static HashSet<String>set = new HashSet<String>()

public static void arrangeAll(String s) {

put(new StringBuilder(s), new StringBuilder())

}

static void put(StringBuilder s1, StringBuilder s2) {

if (s1.length() == 0)set.add(s2.toString())

for (int i = 0i <s1.length()i++) {

put(new StringBuilder(s1).deleteCharAt(i),new StringBuilder(s2).append(s1.charAt(i)))

}

}

public static void main(String[] args) {

arrangeAll("abcd")

System.out.println(set)

}

}

----

输出:

[dcab, acdb, acbd, bcda, bdca, bdac, dbca, bacd, cabd, cdba, cdab, badc, dabc, cadb, dbac, bcad, dacb, cbda, cbad, adbc, adcb, abcd, abdc, dcba]

思路:先有一个起始排列,如1234.从后面扫描,直到找到a[k],a[k]<a[k+1]再从后面扫描,直到找到a[j],这里有 a[k]<a[j]。交换a[k],a[j].再把a[k+1],...a[n-1]排序(从小到大),即得到了一个排列,再循环下去,直到找出所有的排序。用C语言的,参考下: http://user.qzone.qq.com/646203846/infocenter?ptlang=2052