原题地址:https://leetcode-cn.com/problems/next-permutation/comments/
思路:
1、找到第一个左边比右边小的数 。如:1243,为2
2、该数右边找比它大的最小数,交换他们。3是最小的比2大的数,交换2和3,变为1342
3、该数右边升序排列。1324
/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ var nextPermutation = function(nums) { var n=nums.length-1; var i=n; while(i>=1){ if(nums[i]>nums[i-1]){//找到右边的比左边的大的数 如:1243 此时i指向4,i-1指向2 var j=i; var minj=nums[i]; var res=i; while(j<=n){//找右边比2大的最小数,3 if(nums[j]>nums[i-1]){ if(nums[j]<minj){ minj=nums[j]; res=j; } } j++; } [nums[i-1], nums[res]] = [nums[res], nums[i-1]]; // 交换2和3 为1342 var k = nums.length - 1; while(i<=n){//i后面的数排序 只能原地修改 j=i+1; while(j<=n){ if(nums[i]>nums[j]){ [nums[i], nums[j]] = [nums[j], nums[i]]; } j++; } i++ } return nums; } else{ if(i==1){//找不大更大的,则返回最小的 return nums.sort((a,b)=>{return a-b}); } } i--; } };