【CT】LeetCode手撕—31. 下一个排列-2- 实现

⭐31. 下一个排列——题解思路

在这里插入图片描述

class Solution {
    public void nextPermutation(int[] nums) {
        int len = nums.length-1;
        int i = len-1,j;
        // 1. 找拐点
        for(; i>=0 ;i--){
            if(nums[i] < nums[i+1]) break;
        }

        // 最大序列直接 reverse
        if(i==-1){
            int L = 0;
            int R = len;
            while(L<=R){
                swap(nums,L++,R--);
            }
            return;
        }

        // 2. 有拐点
        for( j = len; j>=i+1 ; j--){
            if(nums[j] > nums[i]) break;
        }
        swap(nums,i,j);
        // 实现 Reverse
        int L = i+1;
        int R = len;
        while(L<=R){
            swap(nums,L++,R--);
        }
        return;
    }

    public void swap(int[] nums,int i ,int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}

上一篇:【redis】jedis概述_简单使用(Java中使用redis)


下一篇:数字政务信息系统的技术架构方案和发展趋势研究