31. Next Permutation(下一个排列)

学到了一种新奇的方法,时间复杂度O(n),空间 O(1);

详细解释:解法

AC代码如下:

class Solution {
    public void nextPermutation(int[] nums) {
        if(nums==null||nums.length==0||nums.length==1)
            return;
        int i=nums.length-2;
        while(i>=0&&nums[i]>=nums[i+1])
            i--;
        if(i>=0){
            int j=nums.length-1;
            while(j>=0&&nums[j]<=nums[i])
                j--;
            swap(nums,i,j);
        }
        reverse(nums,i+1);
    }
    public void swap(int[] nums,int i,int j){
        int temp=nums[i];
        nums[i]=nums[j];
        nums[j]=temp;
    }
    public void reverse(int[] nums,int start){
        int end=nums.length-1;
        while(start<end){
            swap(nums,start,end);
            start++;
            end--;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/87640294