全排列算法Java实现

全排列算法:{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);
    }
}
点赞