Leetcode-31. 下一个排列

    科技2022-07-13  122

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

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

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

    以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 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 k = nums.length-2; while(k >= 0 && nums[k+1] <= nums[k]){ k--; } if(k >= 0){ int j = nums.length - 1; while(j >= 0 && nums[j] <= nums[k]){ j--; } swap(nums,k,j); } re(nums,k+1,nums.length-1); } public void re(int[] nums,int i,int j){ while(i<j){ swap(nums,i,j); i++; j--; } } public void swap(int[] nums,int i,int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
    Processed: 0.012, SQL: 8