public class Main {
public ArrayList<String> permutation(String str) {
ArrayList<String> list = new ArrayList<>();
if (str == null || str.length() == 0) {
return list;
}
collect(str.toCharArray(), 0, list);
Collections.sort(list);
return list;
}
public static void collect(char[] chars, int begin, ArrayList<String> list) {
if (begin == chars.length - 1) {
// 不能存入相同的排列
String s = String.valueOf(chars);
if (!list.contains(s)) {
list.add(s);
return;
}
}
for (int i = begin; i < chars.length; i++) {//大的循环,需要控制第一个逐个和后面的交换
swap(chars, i, begin);
collect(chars, begin + 1, list);
swap(chars, i, begin);
}
}
public static void swap(char[] chars, int i, int j) {
char temp = chars[j];
chars[j] = chars[i];
chars[i] = temp;
}
public static void main(String[] args) {
Main a = new Main();
System.out.println(a.permutation("abc"));
}
}
牛客网-递归的使用:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- '''输入'abc',输出['abc', 'acb', 'bac', 'bca', 'cab', 'cba']。写...
- 首先要了解中文字符有多种编码及各种编码的特征。假设n为要截取的字节数。
