字符串全排列
題目說明
輸入一個字符串,按字典序打印出該字符串中字符的所有排列。?
例如輸入字符串a(chǎn)bc,則按字典序打印出由字符a,b,c
所能排列出來的所有字符串a(chǎn)bc,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位置的字符發(fā)生變化
? ? ? ? ? ? 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();
? ? }
}