1 问题描述
输入一个字符串,打印出该字符串的所有排列。例如,输入字符串”abc”,则输出有字符’a’,’b’,’c’所能排列出来的所有字符串”abc”,”acb”,”bac”,”bca”,”cab”,”cba”。
2 解决方案
2.1 递归实现
从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列。如此递归处理,从而得到所有字符的全排列。
import java.util.*;
import static java.util.Collections.sort;
/**
* @author eternalSy
* @version 1.0.0
*/
public class Main {
protected static List<String> re = new ArrayList<>();
public static void main(String[] args) {
char[] a = {'a','b','c','d'};
helper(a,0,a.length-1);
//字典序排序
sort(re);
for (String s:re
) {
System.out.println(s);
}
}
public static void helper(char[] str,int start,int end){
if(end <= 1){
return;
}
if(start == end){
StringBuffer stringBuffer = new StringBuffer();
for(int i = 0;i < str.length;i++){
//System.out.print(str[i]);
stringBuffer.append(str[i]);
}
//System.out.println();
re.add(stringBuffer.toString());
}else{
for (int i = start; i <= end; i++) {
swap(i,start,str);
helper(str,start+1,end);
swap(i,start,str);
}
}
}
public static void swap(int i, int j, char[] str) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}