⭐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;
}
}