给你一串数字或者字符,让你实现他们的全排列,你会怎么实现呢?
下面是用递归算法实现的
package Wangyi;
import java.util.Scanner;
public class Quanpailie {
static int sum=0;
static int[] list;
public static void Perm(int begin,int end){
if(begin==end){
//到了最后一个元素
for(int e:list)
System.out.print(e+" ");
System.out.println();
sum++;
}else{
/*
* 整个算法的核心,其实自己也想到这里,但想不到能用这么精巧的递归算法求解。我觉得这里也有子问题性质的思想
* ,后面的问题也能用同一个函数来解决,这就是递归。
* */
for(int i=begin;i<=end;i++){
/*
* 这两步算法可以理解为保持前缀不变,求后面的全排列
* 然后遍历使每一个数字都能作为前缀,子问题得到解决,以此作为前缀的也能得到解决*/
Swap(i,begin);
Perm(begin+1,end);
Swap(i,begin);
}
}
}
public static void Swap(int i,int j){
int temp=list[i];
list[i]=list[j];
list[j]=temp;
}
public static void main(String[] args){
int n;
Scanner in=new Scanner(System.in);
n=in.nextInt();
list=new int[n];
for(int i=0;i<n;i++){
list[i]=in.nextInt();
}
Perm(0,n-1);
System.out.println(sum);
}
}