题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
实现语言:Java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> res=new ArrayList<String>();
if(str.isEmpty()||str.length()==0){
return res;
}
HashSet<String> set=new HashSet<String>();
helper(set,str.toCharArray(),0);
res.addAll(set);
Collections.sort(res);
return res;
}
private void helper(HashSet<String> set,char[] s,int k){
if(k==s.length){
set.add(new String(s));
return;
}
for(int i=k;i<s.length;++i){
swap(s,i,k);
helper(set,s,k+1);
swap(s,i,k);
}
}
private void swap(char[] s,int i,int j){
char tmp=s[i];
s[i]=s[j];
s[j]=tmp;
}
}