Leetcode31 下一个排列

Leetcode31 下一个排列_第1张图片

Leetcode31 下一个排列_第2张图片

 解题思路:

Leetcode31 下一个排列_第3张图片

 

Leetcode31 下一个排列_第4张图片

 Leetcode31 下一个排列_第5张图片

Leetcode31 下一个排列_第6张图片  

 算法过程的第二步,可以变为将[j,end]排序,然后从[j,end)和i进行比较,在区间j,end区间第一个大于nums[i]后,交换即可

public void nextPermutation(int[] nums) {
        int len = nums.length - 1;
        for(int i = len;i > 0;i--){
            if(nums[i] > nums[i-1]){
                Arrays.sort(nums,i,len+1);
                for(int j = i;j<=len;j++){
                    if(nums[j] > nums[i-1]){
                        int temp = nums[j];
                        nums[j] = nums[i-1];
                        nums[i-1] = temp;
                        return;
                    }
                }
            }
        }
        Arrays.sort(nums);
        return;
     

    }

你可能感兴趣的:(算法,排序算法,数据结构)