全排列问题

其中一个思路:如“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.csdn.net/t_eel/code/detail/56218

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

warn
作者:心亦
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/szhx/p/3219333.html