一. 题目

二. 思路

三. 代码

class Solution
{
    void swap(int[] nums, int x, int y)
    {
        int temp = nums[x];
        nums[x] = nums[y];
        nums[y] = temp;
    }

    void reverse(int[] nums, int l, int r)
    {
        while (l < r) swap(nums, l++, r--);
    }

    public void nextPermutation(int[] nums)
    {
        int n = nums.length;
        int minI = -1;
        for (int i = n - 1; i - 1 >= 0; --i)
            if (nums[i - 1] < nums[i])
            {
                minI = i - 1;
                break;
            }

        if (minI == -1)
        {
            reverse(nums, 0, n - 1);
            return;
        }

        for (int i = n - 1; i >= 0; --i)
            if (nums[i] > nums[minI])
            {
                swap(nums, i, minI);
                break;
            }
        reverse(nums, minI + 1, n - 1);
    }
}