線上程式設計--全排列
阿新 • • 發佈:2019-01-24
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
//全排列 使用回溯法
public class Main{
public static void main(String[] strs) {
String str="abc";
ArrayList<String> result=Permutation(str);
for(int i=0;i<result.size();i++){
System.out .println(result.get(i));
}
}
public static ArrayList<String> Permutation(String str) {
//本題使用回溯法
ArrayList<String> result=new ArrayList<String>();
if(str.length()==0||str==null)
return result; //如果是空的直接返回
HashSet<String> set =new HashSet<String>();
func(set,str.toCharArray(),0);
result.addAll(set);
Collections.sort(result);
return result;
}
public static void func(HashSet<String> set, char[] arr, int n){
if(n==arr.length){ //滿了
set.add(new String(arr));
return ;
}
for(int i=n;i<arr.length;i++){
swap(arr,i,n);
func(set, arr, n+1);
swap(arr,i,n);
}
}
public static void swap(char[] arr,int i,int j){
char c=arr[i];
arr[i]=arr[j];
arr[j]=c;
}
}