以简单实例入手。
public class Solution{
public void nextPermutation(int[] nums) {
int l = nums.length;
int k = -1;
for(int i=l-1;i>0;i--){
if(nums[i-1]<nums[i]){ //not maxpermute
k = i-1;
break;
}
}
// k+1...l-1 max Per
if(k==-1){
int i=0,j=l-1;
while(i<j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i++;
j--;
}
}else{
int f = k+1;
for(int i=l-1;i>=k+1;i--){
if(nums[i]>nums[k]){
f = i;
break; // the first num > nums[k]
}
}
// nums[f] <--> nums[k]
int tmp = nums[f];
nums[f] = nums[k];
nums[k] = tmp;
int i=k+1,j=l-1;
while(i<j){
int tm = nums[i];
nums[i] = nums[j];
nums[j] = tm;
i++;
j--;
}
}
}
}