【递归】输出一个字符串的所有排列

本文通过递归算法详细探讨如何找出一个字符串的所有排列组合。通过将一个字符插入到已排列字符的不同位置,实现从n-1个字符到n个字符的排列扩展。示例代码展示了如何实现这一过程。
摘要由CSDN通过智能技术生成

看到这类问题,就要想到用递归进行解决!类似:compute all, get nth, the first n.....

字符串的排列问题:一个含有n个字符的字符串,求排列,用递归思路来进行考虑,假设已经得到getPerms(n-1),求getPerms(n);

已经得到n-1个字符的排列,求n个字符的排列,只有将额外的那个字符插入到已经得到的n-1的字符的所有排列的所有可能位置。

代码如下:

public class PermutationOfString {
	public static ArrayList<String> getPerms(String s){
		ArrayList<String> perms = new ArrayList<String>();
		if(s==null){
			return null;
		}else if(s.length() == 0){
			perms.add("");
			return perms;
		}
		
		char t = s.charAt(0);
		String remainder = s.substring(1);
		ArrayList<String> subperms = getPerms(remainder);
		for(String item:subperms){
			for(int i=0;i<=item.length();i++){
				String newString = insertCharAt(item,t,i);
				perms.add(newString);
			}
		}
		return perms;
	}
	public static String insertCharAt(Stri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值