0031. Next Permutation
Description
**Input:** nums = [1,2,3]
**Output:** [1,3,2]**Input:** nums = [3,2,1]
**Output:** [1,2,3]**Input:** nums = [1,1,5]
**Output:** [1,5,1]**Input:** nums = [1]
**Output:** [1]ac
Last updated
**Input:** nums = [1,2,3]
**Output:** [1,3,2]**Input:** nums = [3,2,1]
**Output:** [1,2,3]**Input:** nums = [1,1,5]
**Output:** [1,5,1]**Input:** nums = [1]
**Output:** [1]Last updated
class Solution {
public void nextPermutation(int[] nums) {
int swapIndex = -1;
int leftMin = Integer.MAX_VALUE;
for (int i = nums.length - 2; i >= 0; i--) {
if (nums[i] < nums[i+1]) {
swapIndex = i;
break;
}
}
if (swapIndex < 0) {
// Cannot find next permutation.
Arrays.sort(nums);
return;
}
for (int i = nums.length - 1; i >= 0; i--) {
if (nums[i] > nums[swapIndex]) {
swap(nums, swapIndex, i);
break;
}
}
Arrays.sort(nums, swapIndex + 1, nums.length);
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
// 1) find swap point backwardly; 2) find target swap position backwardly; 3) sort the res;
// O(NlogN) time, O(1) space