关于字符全排列递归
编写一个方法,确定某字符串的所有排列组合。
给定一个string A和一个int n,代表字符串和其长度,请返回所有该字符串字符的排列,
保证字符串长度小于等于11且字符串中字符均为大写英文字符,
排列中的字符串按字典序从大到小排序。(不合并重复字符串)
例如:[a,b,c,d]
给出的结果是:
[abc, acb, bac, bca, cba, cab]
解题思路:
首先字符串转化为数组,建立函数,把字符数组和下标为0,传给递归函数.
递归函数设计:出口下标等于数组长度则,添加入链表。 然后进行迭代递归 ,
递归完后,回溯。
package _7递归;
import java.util.ArrayList;
import java.util.Arrays;
public class h回溯全排列 {
static ArrayList<String>res1=new ArrayList<>();
public static void main(String[] args) {
String res="abc";
getpaixu1(res);
System.out.println(res1);
for (String string : res1) {
System.out.print(string+" ");
}
}
private static ArrayList<String> getpaixu1(String res) {
char[] tostring=res.toCharArray();
Arrays.sort(tostring);
geipaixu2(tostring,0);
return res1;
}
private static void geipaixu2(char[] arr, int k) {
if(k==arr.length) {
res1.add(new String(arr));
}
for (int i = k; i < arr.length; i++) {
swap(arr, k, i);
geipaixu2(arr, k + 1);
swap(arr, k, i);
}
}
private static void swap(char[] arr, int i, int j) {
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}