使用一个while循环找到第一个nums[i]<nums[i+1]
的数,如果i为-1的话说明为逆序,则正序后返回。再用一个while循环从后遍历找到第一个大于nums[i]的值,然后交换,之后排序i后面的数组。
let len=nums.length;
let i=len-2;
while(i>=0&&nums[i]>=nums[i+1]){
i--;
}
if(i>=0){
let j=len-1;
while(j>i&&nums[j]<=nums[i]){
j--;
}
[nums[i],nums[j]]=[nums[j],nums[i]];
let queen=nums.splice(i+1,len);
queen.sort((x,y)=>x-y);
nums.push.apply(nums,queen);
}else{
nums.sort((x,y)=>x-y);
}
};