字符串的排列
题目:
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
示例:
输入:s = "abc"
输出:["abc","acb","bac","bca","cab","cba"]
class Solution {
private Set<String> set;
public String[] permutation(String s) {
set = new HashSet();
char[] ch = s.toCharArray();
for(int i = 0; i < ch.length; i++) {
StringBuffer sb = new StringBuffer();
sb.append(ch[i]);
boolean[] book = new boolean[ch.length];
book[i] = true;
dfs(ch, book, sb);
}
return set.toArray(new String[0]);
}
private void dfs(char[] ch, boolean[] book, StringBuffer sb) {
if(sb.length() == ch.length) {
set.add(sb.toString());
return ;
}
for(int i = 0; i < ch.length; i++) {
if(!book[i]) {
book[i] = true;
sb.append(ch[i]);
dfs(ch, book, sb);
book[i] = false;
sb.deleteCharAt(sb.length() - 1);
}
}
}
}