具体分析参考https://blog.youkuaiyun.com/randyjiawenjie/article/details/6313729
但我自己做了一点小改动,原来的代码有个瑕疵,就是相同的数也进行了交换。
下面是改动后的代码:
package com.sise.test;
public class Test01 {
public static int count=0;
public static void main(String[] args){
String[] str={"a","a","c"};
arrange(str,0,str.length);
System.out.println(count);
}
public static void arrange(String[] str,int st,int len){
if(st==len-1){
for(int i=0;i<len;i++){
System.out.print(str[i]+" ");
}
System.out.println();
count++;
}else{
for(int i=st;i<len;i++){
if(isSwap(str,st,i)){
swap(str,st,i);
arrange(str,st+1,len);
swap(str,st,i);
}
}
}
}
public static boolean isSwap(String[] str,int begin,int end){
for(int i=begin;i<end;i++){
if(str[i]==str[end]){
return false;
}
}
return true;
}
public static void swap(String[] str,int i,int j){
String temp=new String();
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
a b c
a c b
b a c
b c a
c b a
c a b
6
a a c
a c a
c a a
3