全排列算法是一种比较常考的算法,他的做法也比较多样。
首先我们来看看最符合我们直观思考的,思路是这样的:假如没有重复元素时,传入一个数组A,并插入到另外一个数组B中,假如B中已经包含这个元素,则跳过,否则插入数组B。我们来看看具体代码:
<span style="font-size:14px;">public static void permutation1(final String str, String buffer){
if (str.length() == buffer.length()){
System.out.println((num++) + ":" + buffer);
return;
}
for (int i = 0; i < str.length(); i++){
if (buffer.indexOf((int)str.charAt(i)) < 0){
permutation1(str, buffer + str.charAt(i));
}
}
}</span>
这个看代码就比较容易理解,所以就不多说了,它有缺点,就是不能有重复,那我们改一改,给每一个值都安置一个状态位,假如插入过置为1,没有则是0,所以,我们又有了第二种方法:
<span style="font-size:14px;">public static void permutation2(final char[][] array, String result, int len){
if (result.length() == len){
System.out.println(result);
}else{
for (int i = 0; i < len; i