(1)求所有可能出现在第一个位置的字符,
(2)把第一个字符和其后面的字符一一交换。
(3)固定第一个字符,求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String input=scanner.nextLine();
char[] c=input.toCharArray();
Set<String> set=new HashSet<String>();
fun(set,c,0);
for(String s:set)
System.out.println(s);
scanner.close();
}
public static void fun(Set<String> set,char[] c,int begin){
if(c.length==0)
return;
if(begin==c.length-1){
set.add(new String(c));
}
for(int i=begin;i<c.length;i++){
char temp=c[begin];
c[begin]=c[i];
c[i]=temp;
fun(set,c,begin+1);
temp=c[begin]; //将之前的交换结果撤销,便于下一次交换
c[begin]=c[i];
c[i]=temp;
}
}
}