全排序

全排序(回溯法)

 * 编写一个方法,确定某字符串的所有排列组合。
 给定一个string A和一个int n,代表字符串和其长度,请返回所有该字符串字符的排列,
 保证字符串长度小于等于11且字符串中字符均为大写英文字符,
 排列中的字符串按字典序从大到小排序。(不合并重复字符串)
 */

package _7递归;
import java.util.ArrayList;
import java.util.Arrays;
public class h回溯全排列 {

static ArrayListres1=new ArrayList<>();//新键一个全局集合
public static void main(String[] args) {
String res=“abcd”;
getpaixu1(res);
System.out.println(res1);
for (String string : res1) {
System.out.println(string); }
}
private static ArrayList getpaixu1(String res) {
// TODO Auto-generated method stub
char[] tostring=res.toCharArray();//转换为字符数组
Arrays.sort(tostring);
geipaixu2(tostring,0);
return res1;
}
private static void geipaixu2(char[] arr, int k) {//传入一个数组
// TODO Auto-generated method stub
if(k==arr.length) {
res1.add(new String(arr));//加入abc
}
//从k位开始的每个字符,都尝试放在新排列的k这个位置
for (int i = k; i < arr.length; i++) {//k=2h后走的
swap(arr, k, i);//把后面每个字符换到k位
geipaixu2(arr, k + 1);//递归
swap(arr, k, i);//回溯
}
}
private static void swap(char[] arr, int i, int j) {
// TODO Auto-generated method stub
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}


你可能感兴趣的:(算法,字符串)