public ArrayList<String> Permutation(String str) {
ArrayList<String> res = new ArrayList<>();
if (str == null || str.length() == 0) return res;
char[] chars = str.toCharArray();
Arrays.sort(chars);
backTrack( res, chars, new StringBuilder(), new boolean[str.length()]);
return res;
}
private void backTrack(ArrayList<String> res, char[] chars, StringBuilder sb, boolean[] visited) {
if (sb.length() == chars.length) {
res.add(new String(sb));
return;
}
for (int i = 0; i < chars.length; i++) {
if (visited[i] || (i > 0 && chars[i] == chars[i-1] && !visited[i-1])) continue;
visited[i] = true;
sb.append(chars[i]);
backTrack(res, chars, sb, visited);
sb.deleteCharAt(sb.length()-1);
visited[i] = false;
}
}
字符串的排列
最新推荐文章于 2023-09-20 10:40:24 发布