1. 程式人生 > 其它 >[LeetCode] #31 下一個排列

[LeetCode] #31 下一個排列

[LeetCode] #31 下一個排列

實現獲取 下一個排列 的函式,演算法需要將給定數字序列重新排列成字典序中下一個更大的排列(即,組合出下一個更大的整數)。

如果不存在下一個更大的排列,則將數字重新排列成最小的排列(即升序排列)。

必須 原地 修改,只允許使用額外常數空間。

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

輸出:[1,3,2]

分三步(以68754為例)

從右往左找,比後一個數小的數(6)

從右往左找,比第一步找到的數大的第一個數,交換位置(78654)

反轉這個數後面的所有數(78645

class Solution {
    public void nextPermutation(int[] nums) {
        
//1 int i = nums.length-2; while(i >= 0 && nums[i] >= nums[i+1] ){ i--; } if(i == -1) reverse(nums, i+1); else{ //2 int j = nums.length-1; while(i >= 0 && nums[i] >= nums[j]){ j
--; } swap(nums, i, j); //3 reverse(nums, i+1); } } public void swap(int[] nums, int a, int b){ int temp = nums[a]; nums[a] = nums[b]; nums[b] = temp; } public void reverse(int[] nums,int i){ int
left = i, right = nums.length-1; while(left < right){ swap(nums, left, right); left++; right--; } } }

知識點:

總結: