输出字符串的全部组合/全排列 Java

本文介绍了使用递归实现字符串的全排列与组合算法。通过两种不同的递归方法——遍历字符串每个字符的选择与不选择,以及利用排列树进行回溯法实现全排列,展示了如何生成所有可能的组合及排列。

递归法(遍历字符串--每个字符只能取或不取)

package com.duoduo.day316;

public class TestABC {
	public static void main(String [] args) {
		String s="ABC";
		char[] c=s.toCharArray();
		StringBuffer sb=new StringBuffer();
		for(int i=1;i<=c.length;i++) {
			permutation(c,0,i,sb);
		}
		
	}

	private static void permutation(char[] c,int begin,int len, StringBuffer sb) {
		if(len==0) {                //当都选择结束时打印sb内容
			System.out.println(sb+" ");
			return;
		}
		
		if(begin==c.length)         
			return;
		
		
		sb.append(c[begin]);   				//取
		permutation(c,begin+1,len-1,sb);   	//剩下的里面选len-1个
		sb.deleteCharAt(sb.length()-1); 	//不取
		permutation(c,begin+1,len,sb);   	//剩下的里面选len个
		
	}
}
		

全排列(排列树  回溯法)

​​​​​​​思路见 https://blog.youkuaiyun.com/Strom72/article/details/80738818 

将 s[start] 与[start,end]中的元素依次交换 之后,在进行全排列(递归) 

1 2 3     -------1 【2,3】

1 2 3 ----------2【1,3】 

1 2 3     -------3 【2,1】

package com.duoduo.day316;

public class TestStr {
	public static void main(String [] args) {
		String s="ABC";
		fullPermutation(s);
	}
	private static void fullPermutation(String s) {
		permutation(s.toCharArray(),0,s.length()-1);
		
	}
	private static void permutation(char[] c, int start, int end) {
		if(start==end)
			System.out.println(new String(c));
		
		else {
			for(int i=start;i<=end;i++) {
				if(i!=start && c[i]!=c[start] || i==start) {  //防止重复 
					swap(c,i,start); 
					permutation(c,start+1,end);    //继续深度搜索
					swap(c,i,start);	
				}	
			}	
		}
		
	}

	private static void swap(char[] c, int i, int start) {
		char temp=c[i];
		c[i]=c[start];
		c[start]=temp;
		
	}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值