31. Next Permutation

这题我记得一刷就卡过。二刷依然卡。。

4321这样的话,说明没有下一个了,就返还1234.
大多数情况是有下一个的,从右边开始找,找到第一个不是递增的地方,然后和右边遍历过的所有元素中,不小于他的最小元素交换。
交换之后,找到位置右边的所有数字必须变成递增,SORT一下就可以。

大概这么个思路,第一次做的时候这个规律墨迹了好久好久。。

public class Solution 
{
    public void nextPermutation(int[] nums) 
    {
        
        if(nums.length == 2)
        {
            int temp = nums[0];
            nums[0] = nums[1];
            nums[1] = temp;
            return;
        }
        
        
        for(int i = nums.length-2;i>=0;i--)
        {
            if(nums[i] < nums[i+1])
            {

                
                int min = i+1;
                for(int j = i+1; j < nums.length;j++)
                {
                    if(nums[j] > nums[i])
                    {
                        min = j;
                    }
                    else break;
                }
                
                swap(nums,min,i);
                Arrays.sort(nums,i+1,nums.length);
                return;
                
            }
        }
        
        Arrays.sort(nums);
        
        
    }
    
    public void swap(int[] nums, int a, int b)
    {
        int temp = nums[a];
        nums[a] = nums[b];
        nums[b] = temp;
    }
}
原文地址:https://www.cnblogs.com/reboot329/p/5971948.html