字符串全排列
题目说明
输入一个字符串,按字典序打印出该字符串中字符的所有排列。
例如输入字符串abc,则按字典序打印出由字符a,b,c
所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
练习地址
牛客
https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7
力扣
https://leetcode.cn/problems/permutations/
代码
public class 字符串全排列 {
public static void main(String[] args) {
String ab = "abc";
String a="AaaaAA";
String s = a.toLowerCase();
Permutation(ab);
}
static ArrayList<String> res = new ArrayList<>();
public static ArrayList<String> Permutation(String str) {
char[] tmp = str.toCharArray();
reserve(tmp, 0, tmp.length);
ArrayList<String> ans = new ArrayList<>(new HashSet<>(res));
Collections.sort(ans);
return ans;
}
public static void reserve(char[] arr, int index, int length) {
if (index == length) {
System.out.println(change(arr));
res.add(change(arr));
return;
}
for (int i = index; i < length; i++) {
char tem = arr[i];
arr[i] = arr[index];
arr[index] = tem;
reserve(arr, index + 1, length);
tem = arr[i]; // 其实就是去为了消除当前层去递归的时候的进行交换字符的影响,
//如果不消除的话,那么就会造成原index位置的字符发生变化
arr[i] = arr[index];
arr[index] = tem;
}
}
public static String change(char[] arr) {
StringBuilder ans = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
ans.append(arr[i]);
}
return ans.toString();
}
}