从控制台输入一个字符串,输出它的全排列,不能重复哦。
想了挺久的一个问题,最后用递归实现全排列,用Set去掉重复的元素。代码如下:
如有改进想法请不吝赐教~~
import java.util.HashSet;
import java.util.Scanner;
public class My_exe {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String str=scanner.nextLine();
scanner.close();
HashSet<String> set = new HashSet<String>();
FullPermutation(str,set);
for(String sttr:set){
System.out.println(sttr);
}
}
public static void FullPermutation(String str,HashSet<String> set){
boolean[] index = new boolean[str.length()];
String ans="";
int num = 1;
FullPermutation(str,num,index,ans,set);
}
public static void FullPermutation(String str,int num,boolean[] index,String ans,HashSet<String> set){
if(num == str.length()){
for(int i = 0; i<index.length; i++){
if(index[i] == false){
ans = ans + str.charAt(i);
// System.out.println(ans);
set.add(ans);
return;
}
}
}
for(int i = 0; i< index.length;i++){
if(index[i] == false){
num++;
index[i] = true;
ans = ans + str.charAt(i);
FullPermutation(str,num,index,ans,set);
num--;
index[i]=false;
ans = ans.substring(0,ans.length()-1);
}
}
}
}