题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则打印出由字符 a,b,c 所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba。
解题思路
- 基于回溯法
代码
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> ret = new ArrayList<>();
if (str == null || str.length() == 0)
return ret;
helper(str.toCharArray(), 0, ret);
Collections.sort(ret);
return ret;
}
private void helper(char[] cs, int swapIndex, ArrayList<String> ret) {
if (swapIndex == cs.length-1) {
String val = String.valueOf(cs);
if (!ret.contains(val))
ret.add(val);
} else {
for (int j = swapIndex; j < cs.length; j++) {
swap(cs, swapIndex, j);
helper(cs,swapIndex+1, ret);
swap(cs, swapIndex, j);
}
}
}
private void swap(char[] cs, int pre, int post) {
char tmp = cs[pre];
cs[pre] = cs[post];
cs[post] = tmp;
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于