剑指 Offer 38.字符串的排列
贴一个java的代码
class Solution {
LinkedList<String> res = new LinkedList<>();
char[] c;
public String[] permutation(String s) {
c = s.toCharArray();
dfs(0);
return res.toArray(new String[res.size()]);
}
public void dfs(int x) {
if(x == c.length - 1) {
res.add(String.valueOf(c));
return;
}
HashSet<Character> set = new HashSet<Character>();
for(int i = x; i < c.length; i++) {
if(set.contains(c[i])) continue;
set.add(c[i]);
swap(i,x);
dfs(x + 1);
swap(i,x);
}
}
public void swap(int i, int x) {
char temp = c[i];
c[i] = c[x];
c[x] = temp;
}
}
具体思路请看原地交换法实现全排列