全排列算法:{1,2,3}的全排列为123、132、213、231、312、321
算法思路:(递归实现)
(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);
(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组;
(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组;
public class Solution {
/* * 对数组arr进行全排列 * 全排列的范围:begin~end */
public void perm(int[] arr,int begin,int end){
//设置递归的出口,即当需要全排列的范围只有一个元素,则全排结束,此数组为全排列
if(begin==end){
for(int i=0;i<=end;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
return;
}else{
//for循环将begin~end中的每一个数放到begin位置中去,并实现全排列
for(int j=begin;j<=end;j++){
swap(arr,begin,j); //for循环将begin~end中的每一个数放到begin位置中去
perm(arr,begin+1,end); //假设begin位置确定,那么对begin+1~end中的数组进行全排列
swap(arr,begin,j); //换过去后再将数组还原
}
}
}
public void swap(int[] arr,int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void main(String[] args) {
int[] arr=new int[]{1,2,3};
Solution solution=new Solution();
solution.perm(arr,0,2);
}
}