全排列:
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
公式:
- 不含重复元素:
全排列数f(n)=n! - 含i个重复元素:
个数num = n!/i!
Java实例:
public class AllSort {
public static void main(String[] args) {
char buf[] = {'a', 'b', 'c'};
perm(buf, 0, buf.length - 1);
}
public static void perm(char[] buf, int start, int end) {
if (start == end) {//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可(特殊情况)
for (int i = 0; i <= end; i++) {
System.out.print(buf[i]);
}
System.out.println();
} else {//多个字母全排列(普遍情况)
for (int i = start; i <= end; i++) {//(让指针start分别指向每一个数)
char temp = buf[start];//交换数组第一个元素与后续的元素
buf[start] = buf[i];
buf[i] = temp;
perm(buf, start + 1, end);//后续元素递归全排列
temp = buf[start];//将交换后的数组还原
buf[start] = buf[i];
buf[i] = temp;
}
}
}
}
结果