1.题目
2.解法
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> all = new ArrayList<>();
if (str != null || str.length() > 0) {
Search(str.toCharArray(), 0, all);
Collections.sort(all);
}
// 1个return
return all;
}
public void Search(char[] str, int b, ArrayList<String> arr) {
if (b == str.length-1) {
// str已经改变了
String val = String.valueOf(str);
// 假设有重复字符的话
if (!arr.contains(val)) {
arr.add(val);
}
}
for (int i = b; i < str.length; i++) {
// 带入的是整个字符数组
swap(str, i, b);
// 你把i的位置放到了b,那么开始确实是b+1
Search(str, b+1, arr);
swap(str, i, b);
}
}
public void swap(char[] str, int i, int j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
时间复杂度为O(n!),n为str.length(), 空间复杂度为O(n!) + 递归栈O(n)