Java里也没有这个东西…

public class Main{
   
    /** * 下一个排列 stl中的next_permutation() * @param nums * @return */
    static boolean nextPermutation(int[] nums){
   
        //将数组分为三部分,第二部分是一个元素,第三部分是递减子序列
        int len=nums.length;
        for(int i=len-1;i>0;i--){
   
            //找到第二第三部分的分界线
            if(nums[i]>nums[i-1]){
   
                //v即为第二部分元素
                int v=nums[i-1];
                int j=len-1;
                //在第三部分元素找到最小的大于第二部分元素的元素
                for(;j>=i;j--){
   
                    if(nums[j]>v){
   
                        break;
                    }
                }
                //进行交换
                swap(nums,i-1,j);
                int l=i;
                int r=len-1;
                //将第三部分元素逆序
                while(l<r){
   
                    swap(nums,l,r);
                    l++;
                    r--;
                }
                //得到新的全排列
                return true;
            }
        }
        //整个数组已经递减,没有下一个排列
        return false;
    }
    /** * 上一个排列 stl中的prev_permutation() * @param nums * @return */
    static boolean prevPermutation(int[] nums){
   
        int len=nums.length;
        for(int i=len-1;i>0;i--){
   
            if(nums[i]<nums[i-1]){
   
                int v=nums[i-1];
                int j=len-1;
                for(;j>=i;j--){
   
                    if(nums[j]<v){
   
                        break;
                    }
                }
                swap(nums,i-1,j);
                int l=i;
                int r=len-1;
                while(l<r){
   
                    swap(nums,l,r);
                    l++;
                    r--;
                }
                return true;
            }
        }
        return false;
    }

    static void swap(int[] nums,int i,int j){
   
        int t=nums[i];
        nums[i]=nums[j];
        nums[j]=t;
    }
    static void printArr(int[] nums){
   
        int l=nums.length;
        for(int i=0;i<l;i++){
   
            System.out.print(nums[i]+" ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
   
        int[] a=new int[]{
   1,2,3,4};
        do{
   
            printArr(a);
        }while (nextPermutation(a));
        System.out.println("-----------");
        do{
   
            printArr(a);
        }while (prevPermutation(a));
    }
}