给定任意的不重复字符:a、 b、 5、3、Z , 通过程序得到所有字符可能的组合情况。
规律:
第1(i=0)轮:
得到:排列长度为1的字符串:
这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)
"a" , "b" , "5" , "3" , "Z"
第2(i=1)轮:
得到:排列长度为2的字符串,方法:用一轮得到的字符串和给定的每个字符都组合一次。
这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)
第3(i=2)轮:
得到:排列长度为3的字符串,方法:用一轮得到的字符串和给定的每个字符都组合一次。
这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)
第5(i=4)轮:
得到: 排列长度为5的字符串,方法:用一轮得到的字符串和给定的每个字符都组合一次。
这一次可得到: (上一轮字符串的个数)*(给定字符的个数-i)
public class 排列
{
public static void main(String[] args)
{
String[] chars = new String[]{"a", "b", "5", "3", "Z" , "C" , "X"};
String[] prevStrArr = new String[]{""}; // 初始一个长度为0的字符串
// i控制正在进行第几轮
for(int i = 0 ; i < chars.length ; i ++)
{
// 每一轮得到的字符串的个数:(上一轮字符串的个数)*(给定字符的个数-i)
String[] tmp = new String[prevStrArr.length * (chars.length - i)];
int count = 0 ;
for(int j = 0 ; j < prevStrArr.length ; j++)
{
for(int k = 0 ; k < chars.length ; k++)
{
// 如果result字符串没有包含chars[k],就可以进行组合
if(! prevStrArr[j].contains(chars[k]) )
{
// 用result每个字符串, 与chars中每个字符都组合一次。
tmp[count++] = prevStrArr[j] + chars[k];
}
}
}
prevStrArr = tmp;
}
System.out.println(Arrays.toString(prevStrArr));
System.out.println(prevStrArr.length);
}
}