字符全排列上

关于字符全排列递归

  编写一个方法,确定某字符串的所有排列组合。
 给定一个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回溯全排列 {
/**		 * 编写一个方法,确定某字符串的所有排列组合。 
	 给定一个string A和一个int n,代表字符串和其长度,请返回所有该字符串字符的排列,
	 保证字符串长度小于等于11且字符串中字符均为大写英文字符,
	 排列中的字符串按字典序从大到小排序。(不合并重复字符串)
	 */
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) {
	// 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;
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金石不渝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值