class Solution {
public void nextPermutation(int[] nums) {
int small=-1;
for(int i=nums.length-2;i>=0;i--){
if(nums[i]<nums[i+1]){
small=i;
break;
}
}
if(small==-1){
reverse(nums,0,nums.length-1);
return;
}
int large=-1;
for(int i=nums.length-1;i>=0;i--){
if(nums[i]>nums[small]){
large=i;
break;
}
}
swap(nums,small,large);
reverse(nums,small+1,nums.length-1);
}
private void swap(int[] nums,int a,int b){
int temp=nums[a];
nums[a]=nums[b];
nums[b]=temp;
}
private void reverse(int[] nums,int a,int b){
while(a<b){
swap(nums,a,b);
a++;
b--;
}
}
}
LeetCode精选100题——第31题——下一个排列
最新推荐文章于 2022-01-20 22:27:23 发布