LeetCode31——下一个排列

    技术2025-05-02  15

    题目描述

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

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

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

    以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1

    题目分析

    要找到下一个排列就是从后往前找到一个降序的位置,然后从后面找一个比当前数a大的最小的一个数b,然后交换a b的位置,之后对后面的数进行排序。

    代码

    Java代码如下:

    class Solution { public void nextPermutation(int[] nums) { int n=nums.length; for(int i=n-1;i>=0;i--) { if(i==0) { Arrays.sort(nums); return; } else { if(nums[i-1]<nums[i]) { Arrays.sort(nums,i,n); for(int j=i;j<n;j++) { if(nums[j]>nums[i-1]) { int temp=nums[i-1]; nums[i-1]=nums[j]; nums[j]=temp; return; } } } } } } }
    Processed: 0.012, SQL: 9