31. 下一个排列

Posted 五月的海湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了31. 下一个排列相关的知识,希望对你有一定的参考价值。

package leetcode;

public class demo_31 {
    public void nextPermutation(int[] nums) {
        int i;
        int j;
        for(i=nums.length-1;i>0;i--) {
            //从右往左寻找出nums[i-1]<nums[i]
            if(nums[i-1]<nums[i]) {
                int min=i;
                //从i开始寻找最小的一个但是大于nums[i-1]的位置
                for(j=nums.length-1;j>=i;j--) {
                    //从i开始的数组是非降序的,第一个大于nums[i-1]的就是最小的
                    if(nums[j]>nums[i-1]) {
                        min=j;
                        break;
                    }
                }
                //交换nums[i-1]和nums[min]的位置
                int k=nums[i-1];
                nums[i-1]=nums[min];
                nums[min]=k;        
                break;
            }
        }
        //因为从i开始都是非降序的,所以要调整为从i开始最小的数组
        j=nums.length-1;
        while(i<j) {
            int k=nums[i];
            nums[i]=nums[j];
            nums[j]=k;
            i++;
            j--;
        }
        for(int k:nums) {
            System.out.print(k+" ");
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_31 d31=new demo_31();
        int[] nums= {2,3,1,3,3};
        d31.nextPermutation(nums);
    }

}

 

以上是关于31. 下一个排列的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-----31. 下一个排列

LeetCode 31 Next Permutation(下一个全排列)

Leecode31. 下一个排列——Leecode大厂热题100道系列

Leecode31. 下一个排列——Leecode大厂热题100道系列

LeetCode:下一个排列31

p124 数组的下一个排列(leetcode 31)