首页 > 其他 > 详细

31. 下一个排列

时间:2021-05-16 18:50:29      阅读:21      评论:0      收藏:0      [点我收藏+]
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. 下一个排列

原文:https://www.cnblogs.com/Yshun/p/14774106.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!