使用递归求字符串str的所有全排列
什么是全排列? 例如字符串str="abc"
第一个位置是a:
(第一个位置已被选,那么第一个位置右边的位置继续选)
第二个位置是b:
(第一个位置、第二个位置已被选,那么第二个位置右边的位置继续选)
第三个位置是c:
abc
第二个位置是c:
(第一个位置、第二个位置已被选,那么第二个位置右边的位置继续选)
第三个位置是b:
acb
第一个位置是b:
(第一个位置已被选,那么第一个位置右边的位置继续选)
第二个位置是a:
(第一个位置、第二个位置已被选,那么第二个位置右边的位置继续选)
第三个位置是c:
bac
第二个位置是c:
(第一个位置、第二个位置已被选,那么第二个位置右边的位置继续选)
第三个位置是a:
bca
第一个位置是c:
(第一个位置已被选,那么第一个位置右边的位置继续选)
第二个位置是b:
(第一个位置、第二个位置已被选,那么第二个位置右边的位置继续选)
第三个位置是a:
cba
第二个位置是a:
(第一个位置、第二个位置已被选,那么第二个位置右边的位置继续选)
第三个位置是b:
cab
综上:str的全排列有:【abc,acb,bac,bca,cba,cab】
代码如下所示:
public class Class1 {
public static void main(String[] args) {
String s = "abc";
char[] chars = s.toCharArray();
List<String> sequences = new ArrayList<String>();
getAllSort(chars,0,sequences,"");
for (String sequence : sequences) {
System.out.println("sequence = " + sequence);
}
}
/**
* 获取一个字符串的所有全排列
* @param chars 字符串变成一个个的字符
* @param position 当前位置
* @param allSorts 存放所有的全排列
* @param sort 一个排列 --经过分析不需要该参数
*/
private static void getAllSort(char[] chars,int position,List<String> allSorts,String sort){
if(position == chars.length){
allSorts.add(String.valueOf(chars));
return;
}
for(int j=position;j<chars.length;j++){
swap(chars,position,j);
getAllSort(chars,position+1,allSorts,sort);
swap(chars,position,j);
}
}
/**
* 交换char数组i和j位置的值
* @param chars char数组
* @param i i位置
* @param j j位置
*/
private static void swap(char[] chars,int i,int j){
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}