leetcode==下一个排列

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须 原地 修改,只允许使用额外常数空间。


示例 1:

输入:nums = [1,2,3]

输出:[1,3,2]

示例 2:

输入:nums = [3,2,1]

输出:[1,2,3]

示例 3:

输入:nums = [1,1,5]

输出:[1,5,1]

示例 4:

输入:nums = [1]

输出:[1]


提示:

1 <= nums.length <= 100

0 <= nums[i] <= 100

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/next-permutation

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


代码实现:

class Solution {

    public void nextPermutation(int[] nums) {

        if (nums == null || nums.length == 0 || nums.length == 1) {

            return;

        }

        int a = - 1;

        int b = nums.length - 1;

        for (int i = nums.length - 1; i > 0; i--) {

            if (nums[i - 1] < nums[i]) {

                a = i - 1;

                break;

            }

        }

       if (a != -1) {

            for (int i = nums.length - 1; i > a; i--) {

                if (nums[i] > nums[a]) {

                    b = i;

                    int temp = nums[a];

                    nums[a] = nums[b];

                    nums[b] = temp;

                    break;

                }

            }

        }

        int head = a + 1;

        int tail = nums.length - 1;

        while (head < tail) {

            int temp = nums[head];

            nums[head] = nums[tail];

            nums[tail] = temp;

            head++;

            tail--;

        }

    }

}

你可能感兴趣的:(leetcode==下一个排列)