java字符串的全排列算法。

问题:给出形如“abc”的字符串,要全输出该字符串等长度的全排列结果。

标准输出为:abc

                      acb

                      bac

                      bca

                      cab

                      cba

思路:利用递归算法,类似二叉树的先序遍历,最重要的不同是要解决回朔问题,按照常规的递归算法a->b->c,输出abc后,回朔到b此时的缓存字符串应当做删除操作,将c删掉,否则继续append的话会有形如abccb的错误。

public class FullPermutation {
	//static StringBuilder fullString=new StringBuilder();
	static void fullPermutation(String s,StringBuilder currentString){
		if(s.isEmpty()){
			System.out.println(currentString);
		}
		for(int i=0;i<s.length();i++){
			char ch=s.charAt(i);
			currentString.append(ch);
			
			String newString=s.replaceAll(String.valueOf(ch),"");      //剔除字母
			fullPermutation(newString,currentString);                                //递归
			currentString.delete(currentString.length()-1, currentString.length());  //解决回朔问题
			
		}
	}
	public static void main(String[] args){
		String s="abcd";
		StringBuilder currentString=new StringBuilder();
		fullPermutation(s,currentString);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值