一个字符串的全排列 s="abcd"
把s分成两部分a和bcd,然后,在对bcd分成两部分,递归。
同时,交换首位后后面的每一位字符,比如交换a和b,然后s=bacd,然后在分成两部分,递归。
for(s.start---s.length)
交换start和后面的字符
递归调用
import java.util.*;
public class 字符串全排列 {
public static void main(String[] args) {
// TODO Auto-generated method stub
new 字符串全排列().Permutation("ab");
}
public ArrayList<String> Permutation(String str) {
ArrayList<String> s=new ArrayList();
if(str==null||str.length()==0)
return s;
char r[]=str.toCharArray();
Permutation2(r,0,s);
//for(String t:s)
// System.out.println(t);
return s;
}
void Permutation2(char s[],int begin,ArrayList<String> arr)
{
if(begin==s.length-1)
{arr.add(new String(s));}
for(int i=begin;i<s.length;i++)
{
if(i==begin||s[i]!=s[begin])
{
swap(s,i,begin);
// System.out.println(new String(s));
Permutation2(s,begin+1,arr);
//System.out.println(new String(s));
swap(s,i,begin);
}
}
}
public void swap(char[]t,int i,int j)
{
char c=t[i];
t[i]=t[j];
t[j]=c;
System.out.println(new String(t));
}
}