计算一个字符串的全排列,不考虑其中有重复字符
思想:1、确定第一个字符的位置,字符串中的每一个字符都可以作为第一个字符,因此通过循环将第一个字符分别和后面的每个字符对调
2、从第二个字符开始,对后面的字符进行全排列,即进行递归处理
package stringPermutation;
/**
* 计算字符串的全排列
* @author MING
*
*/
public class StringPermutation {
/**
* 全排列方法
* @param s
* @param from 字符数组的开始索引
* @param to 字符字符数组的结束索引
*/
public static void sort(char[] s,int from,int to){
if(from == to){
System.out.println(s);
}
else{
for(int i=from;i<=to;i++){
//对当前要全排列的字符串处理,交换当前第一个字符和后面的第i个字符
swap(s,from,i);
//对剩下的字符进行全排列
sort(s,from+1,to);
//换回来,为下一轮for循环准备
swap(s,from,i);
}
}
}
/**
* 将字符数组的指定两个字符对调
* @param s
* @param i
* @param j
*/
public static void swap(char[] s,int i,int j){
char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
//测试
public static void main(String[] args) {
char[] s = {'a','b','c','d'};
sort(s,0,3);
}
}