Problem 31

Next Permutation

Posted by Ruizhi Ma on July 18, 2019

问题描述

https://leetcode.com/problems/next-permutation/

解决思路

不太会,没能理解。只能先把代码贴上来。

问题解惑

代码

class Solution {
    public void nextPermutation(int[] nums) {
        if(nums == null || nums.length == 0) return;
        
        int firstSmall = -1;
        for(int i = nums.length - 2; i >= 0; i--){
            if(nums[i] < nums[i + 1]){
                firstSmall = i;
                break;
            }
        }
        
        if(firstSmall == -1){
            reverse(nums, 0, nums.length - 1);
            return;
        }
        
        int firstLarge = -1;
        for(int i = nums.length - 1; i > firstSmall; i--){
            if(nums[i] > nums[firstSmall]){
                firstLarge = i;
                break;
            }
        }
        swap(nums, firstSmall, firstLarge);
        reverse(nums, firstSmall + 1, nums.length - 1);
        return;
    }
    
    public void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i++] = nums[j];
        nums[j++] = temp;
    }
    
    public void reverse(int[] nums, int i, int j){
        while(i < j){
            swap(nums, i++, j--);
        }
        
    }
}

效率探究

小感想