我们知道正序是最小的,倒序是最大的。因此我们可以从后往前去找第一个非倒序的值,然后用这个值去跟倒序数里面比它大的第一个数进行交换即可。最后记得反转逆序数组。 特殊情况: 倒序 直接返回正序
size == 1直接返回原数组

import java.util.*;

public class Solution {
    public int[] nextPermutation (int[] nums) {
        // write code here
        int n = nums.length;
        if(nums.length == 1){
            return nums;
        }
        int k = n-1;
        while(k-1>=0&&nums[k-1] > nums[k]){
            k--;
        }
        if(k==0){
            Arrays.sort(nums);
            return nums;
        }
        k--;
        int t = k;
        while(t + 1 <n && nums[t+1] > nums[k]){
            t++;
        }
        swap(nums,k,t);
        k = k+1;
        while(k<t){
            swap(nums,k++,t--);
        }
    
        return nums;
         
    }
    void swap(int[]nums,int a,int b){
        int tmp = nums[a];
        nums[a] = nums[b];
        nums[b] = tmp;
    }
}