输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
限制:
1 <= s 的长度 <= 8
1、回溯
class Solution {
char[] charArray;
List<String> res=new ArrayList<>();
public String[] permutation(String s) {
int len=s.length();
charArray=s.toCharArray();
Arrays.sort(charArray);
dfs(0);
return res.toArray(new String[res.size()]);
}
public void dfs(int index){
if(index==charArray.length-1){
res.add(String.valueOf(charArray));
return;
}
HashSet<Character> set=new HashSet<>();
for(int i=index;i<charArray.length;i++){
if(set.contains(charArray[i])){
continue;
}
set.add(charArray[i]);
swap(i,index);
dfs(index+1);
swap(i,index);
}
}
public void swap(int a,int b){
char temp=charArray[a];
charArray[a]=charArray[b];
charArray[b]=temp;
}
}