思路:首先找到最后一段从大到小的排序子列,然后将其反向,找到这个子列开头的数字,与该子列比较,找到第一个比他大的数字,交换。
public class Solution {
public void nextPermutation(int[] nums) {
if (nums.length>1) {
int a=0;
for (int i = 1; i < nums.length; i++) {
if (nums[i]>nums[i-1]) {
a=i;
}
}
for (int i = a; i < (a+nums.length)/2; i++) {
int k=nums[i];
nums[i]=nums[nums.length-i+a-1];
nums[nums.length-i+a-1]=k;
}
if (a>0) {
for (int i = a; i < nums.length; i++) {
if (nums[a-1]<nums[i]) {
int k=nums[i];
nums[i]=nums[a-1];
nums[a-1]=k;
break;
}
}
}
}
}
}
耗时:348ms,中下游。