问题
求n个元素的全排列。
eg:
- 输入:a b c
- 输出:abc acb bac bca cab cba
思路
将这n个元素看做一个数组,我们用一个数值k(从0开始)来代表某个元素的位置索引,那么让数组中每一个元素与k进行一次交换,然后将k加1继续调用递归,最后回溯(将交换位置后的数组还原)。
实现代码
package suanfa;
//k:当前的交换位置
//让k后面的每个元素与k交换
public class AllList {
public static void f(char[] data,int k)
{
if(k==data.length-1)
{
for(int i=0;i<data.length;i++)
{
System.out.print(data[i]+" ");
}
System.out.println();
}
for(int i=k;i<data.length;i++)
{
{//试探
char t=data[k];
data[k]=data[i];
data[i]=t;
}
f(data,k+1);
{//回溯
char t=data[k];
data[k]=data[i];
data[i]=t;
}
}
}
public static void main(String[] args) {
char[] data="ABCDE".toCharArray();
f(data,0);
}
}