全排序

全排序(回溯法)

 * 编写一个方法,确定某字符串的所有排列组合。
 给定一个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;
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金石不渝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值