全排列问题

其中一个思路:如“12345”,将1插入2、3、4、5的所有组合串的可能位置(“2345”的全排列),“2345”的全排列则是2插入3、4、5的所有组合成可能位置,如此递归。

public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<string> list = quanpai("12345");
		for (String string : list) {
			System.out.println(string);
		}
		
		System.out.println(list.size());
	}

	//全排列主函数
	private static List<string> quanpai(String str) {
		List<string> list = new ArrayList<string>();
		if(str.length() <= 1)
		{
			list.add(str);			
		}
		else
		{
			char a = str.charAt(0);
			String subStr = str.substring(1);
			//得到子串的全排列
			List<string> subList = quanpai(subStr);
			//将第一个字符分别插入子串的全排列的每个位置
			for (String string : subList) {
				for (int i = 0; i <= string.length(); i++) {
					String str1 = insertCharToStringAtIndex(a, string, i);
					list.add(str1);
				}
			}
		}
		return list;
	}
	
	
	//将字符插入字符串指定位置
	private static String insertCharToStringAtIndex(char ch, String str, int index)
	{
		String sub1 = str.substring(0, index);
		String sub2 = str.substring(index);
		return sub1 + ch + sub2;
	}


另附一种方案:http://my.youkuaiyun.com/t_eel/code/detail/56218

参考:http://www.cnblogs.com/1-2-3/archive/2011/05/23/generate-permutation-part3.html

转载于:https://www.cnblogs.com/szhx/archive/2013/05/03/3219333.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值