题目:
思路:
使用递归,第一个数字和后面的每一个数字交换一次,第二个数字同。
代码:
class Solution {
public String[] permutation(String s) {
if(s == null || s==""){
return null;
}
char[] chars = s.toCharArray();
int a = 0;
String[] strings = new String[0];
Set<String> list = new HashSet<>();
dfs(chars, list, a);
String[] strings1 = list.toArray(strings);
return strings1;
}
private void dfs(char[] chars, Set<String> set, int a) {
if (a >= chars.length - 1) {
String s = String.valueOf(chars);
set.add(s);
return;
}
for (int i = a; i < chars.length; i++) {
exchage(chars, a, i);
dfs(chars, set, a+1);
// 因为是首字母交换,所以要交换回去
exchage(chars, a, i);
}
}
private void exchage(char[] chars, int a, int i) {
char temp;
temp = chars[i];
chars[i] = chars[a];
chars[a] = temp;
}
}