LeetCode刷题笔记JAVA语言

31. Next Permutation(下一个大的数)

2018-04-21  本文已影响0人  cixing

1.从后往前找第一个满足num[i-1] < num[i]的索引i。

2.把num[i-1]和(i,n-1)中,比num[i-1]大的最小数交换。(从后往前找,交换后,(i,n-1)任然逆序)

3.nums[i]到nums[n-1]逆序排列。

    public void swap(int []nums,int a,int b){
        int tmp=nums[a];
        nums[a]=nums[b];
        nums[b]=tmp;
    }
    public void revers(int []nums,int start,int end){
        for(int i=start;i<=(start+end)/2;i++) {
                swap(nums,i,end-i+start);
            }   
    }
    public void nextPermutation(int[] nums) {
        int len=nums.length;
        int p=len-1;
         while(p>0){
             if(nums[p-1]<nums[p])
                 break;
             p--;
         }
        if(p==0)
            revers(nums,0,len-1);
        else{
           int q=len-1;
           while(q>p-1){
               if(nums[q]>nums[p-1])
                   break;
               q--;
           }
           swap(nums,q,p-1);
           revers(nums,p,len-1); 
           return;
        }          
    }
上一篇 下一篇

猜你喜欢

热点阅读