思路:
首先求出低一个位置所有可能的字符,即把第一个字符和后面的字符交换,第一个字符确定后,再确定第二个位置,也是执行相关的交换操作。DFS
public ArrayList<String> Permutation(String str) {
ArrayList<String> res=new ArrayList<>();
if(str==null||str.length()==0)
return res;
char[] ch=str.toCharArray();
int len=str.length();
dfs(ch,0,res);
Collections.sort(res);
return res;
}
public void dfs(char[] ch,int index,ArrayList<String> res){
if(index==ch.length){
if(!res.contains(String.valueOf(ch))){
res.add(String.valueOf(ch));
}
}
for(int i=index;i<ch.length;i++){
char temp=ch[index];
ch[index]=ch[i];
ch[i]=temp;
dfs(ch,index+1,res);
temp=ch[index];
ch[index]=ch[i];
ch[i]=temp;
}
}
Leetcode