31. 下一个排列

820 阅读1分钟
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 

1,2,3 → 1,3,2 

3,2,1 → 1,2,3 

1,1,5 → 1,5,1  



class Solution {
   public void nextPermutation(int[] nums) {
       if(nums==null||nums.length<=1)
           return;
       int start = nums.length-2;
       while (start>=0){
           if(nums[start]<nums[start+1])
               break;
           --start;
       }
       Arrays.sort(nums,start+1,nums.length);
       for(int i=start;i>=0;--i){
           for(int p=start+1;p<nums.length;++p){
               if(nums[i]<nums[p]){
                   int tmp = nums[i];
                   nums[i] = nums[p];
                   nums[p] = tmp;
                   return;
               }
           }
       }
   }
}