#31. Next Permutation
这道题是求比当前排列更大的下一个排列。
数字的排列是有顺序的,我们可以发现这个顺序是,数字从个位向前的顺序来看,后一个都应该比前一个大,如果后一个比前一个小,那么这个顺序就存在比它更大的排列。因此我们要做的第一步就是找到这个不再符合后一个比前一个大的数字的位置。
当我们找到需要重新排列的子数组arr后,下一步是在子数组中找到比arr[0]大的第一个数,交换。然后剩下的数字按照从左到右从小到大的顺序排,就是下一个排列了。
var nextPermutation = function(nums) {
let i = nums.length-2;
while(nums[i]>=nums[i+1]) {
i--;
}
if(i>=0) {
let j = nums.length-1;
while(nums[j]<=nums[i]) {
j--;
}
swap(i,j);
}
reverse(nums,i+1);
function swap(i,j) {
let temp = nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
function reverse(nums,i) {
let j=nums.length-1;
while(j>=i) {
swap(i,j);
i++;
j--;
}
}
return nums;
};