版权声明:本文为博主原创文章,未经博主允许不得转载
题目描述:
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
var nextPermutation = function(nums) {
var x={};
x={a:true,b:true,c:true}
for(i=nums.length-1;i>=0;i--){
if(nums[i]>nums[i-1]&&x.a==true){
x.b=nums[i-1];
x.c=i-1
i=nums.length-1;
x.a=false
}
if(x.a==false&&nums[i]>x.b){
nums[x.c]=nums[i];
nums[i]=x.b;
break
}
}
if(x.a==false){
j=nums.length-1
l=0
for(k=x.c+1;k<nums.length;k++,j--){
l++
if(l>(nums.length-x.c-1)/2){break}
sum=nums[k];
nums[k]=nums[j];
nums[j]=sum
}
}
if(i<=0){
nums=nums.reverse()
}
};