一、标记法
public class 全排列01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr=new int[] {1,2,3,5};
StringBuffer sb=new StringBuffer();
dfs(arr,sb);
}
static void dfs(int[] a,StringBuffer sb) {
if(sb.length()==a.length) {
System.out.println(sb);
return;
}
for(int i=0;i<a.length;i++) {
int temp=a[i];
if(a[i]==-1)
continue;
sb.append(a[i]);
a[i]=-1;
dfs(a,sb);
sb.deleteCharAt(sb.length()-1);
a[i]=temp;
}
}
}
二、交换法
public class 全排列02 {
static int[] a=new int[] {1,2,3,5};
public static void main(String[] args) {
dfs(0);
}
static void dfs(int index) {
if(index>=a.length) {
for(int i=0;i<a.length;i++) {
System.out.print(a[i]);
}
System.out.print(" ");
return;
}
for(int i=index;i<a.length;i++) {
swap(i,index);
dfs(index+1);
swap(i,index);
}
}
static void swap(int index1,int index2) {
int temp=a[index1];
a[index1]=a[index2];
a[index2]=temp;
}
}
三、看不懂的方法
public class 全排列03{
public static void permutation1(String str ,String result ,int len){
if(result.length()==len){
System.out.print(result+" ");
}
for(int i=0;i<str.length();i++){
if(result.indexOf(str.charAt(i))<0){
permutation1(str, result+str.charAt(i), len);
}
}
}
public static void main(String args[]) throws Exception {
String s = "1423";
String result = "";
permutation1(s, result, s.length());
}
}