比较简单的回溯解题思路,可以参考 leetcode 全排列 这题。不同的是本题需要加上判断是否重复的条件
解题思路:
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
char[] array = str.toCharArray();
int len = array.length;
boolean[] used = new boolean[len];
ArrayList<String> res = new ArrayList<>();
if (len <= 0) {
return res;
}
LinkedList<Character> path = new LinkedList<>();
dfs(array, len, 0, used, path, res);
return res;
}
private void dfs(char[] array, int len, int depth, boolean[] used, LinkedList<Character> path,
ArrayList<String> res) {
if (depth == len) {
StringBuilder sb = new StringBuilder();
for (char c: path) {
sb.append(c);
}
String s = sb.toString();
if (!res.contains(s))
res.add(s);
}
for (int i = 0; i < len; i++) {
if (!used[i]) {
used[i] = true;
path.add(array[i]);
dfs(array, len, depth+1, used, path, res);
used[i] = false;
path.removeLast();
}
}
}
}
京公网安备 11010502036488号