给出一个任意整数序列如:1,2,5,7,6,4,3。
第一步:从右往左找,找到第一个a[i+1]>a[i]的数,可知此时a(i)为5,a[i+1]为7。
第二步:再次从右往做找,找出i右边比a[i]大或者相等的数。因为此时经过第一步的判断,可知i右边的序列一定是一个降序序列,从右往左找出第一个大于a[i]的数a[j]。
第三步:交换a[i]和a[j]。
第四步:将i右边的序列更改为最小的序列,则最后的整个序列则为最大的序列。
代码:
class Solution {
public void nextPermutation(int[] nums) {
int i=nums.length-2;
while(i>=0&&nums[i]>=nums[i+1]){
i--;
}
//第一步:从右往左首先找到第一个比前一个数大的数,即nums[i+1>nums[i]]
if(i>=0){
int j=nums.length-1;
while(j>0&&nums[j]<=nums[i]){
j--;
}
//第二步:从i的右边再找到比nums[i]大的数
int temp=nums[j];//
nums[j]=nums[i];//第三步:交换nums[i],nums[j]
nums[i]=temp;//
}
//第四步:将i后面的数字排序
int l=i+1;
int k=nums.length-1;
while(l<k){
int temp=nums[k];
nums[k]=nums[l];
nums[l]=temp;
l++;
k--;
}
}
}