title
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
solution
import java.util.ArrayList;
import java.util.*;
public class Solution {
private String s = null;
private ArrayList<String> res=new ArrayList<>();
private boolean visit[]=null;
private void backtracking(StringBuilder stringBuilder){
if(stringBuilder.length()==s.length()){
res.add(stringBuilder.toString());
return;
}
for(int i=0;i<s.length();i++){
if(i!=0&&s.charAt(i)==s.charAt(i-1)&&!visit[i-1]){
continue;
}
if(visit[i])
continue;
visit[i]=true;
stringBuilder.append(s.charAt(i));
backtracking(stringBuilder);
stringBuilder.deleteCharAt(stringBuilder.length()-1);
visit[i]=false;
}
}
public ArrayList<String> Permutation(String str) {
s=str;
if(str==null||str.length()==0){
return res;
}
visit=new boolean[str.length()];
Arrays.fill(visit,false);
backtracking(new StringBuilder());
System.out.println(res.toString());
return res;
}
public static void main(String[] args) {
Solution solution=new Solution();
ArrayList<String> res = solution.Permutation("abc");
}