先遍历一遍数组,从后向前找,找出这个数,这个数的后一位比这个数大(找出这个数后,可以判定,这个数值后的数组是降序排列的)
将找到的这个数与比这个数大的值交换(按从后往前的顺序找第一个比这个数大的数)
交换之后,i 表示这个数的后一位,j 表示最后一个数,依次进行swap操作。
class Solution {
public void nextPermutation(int[] nums) {
int i = nums.length-2;
while(i>=0 && nums[i]>=nums[i+1]) i--;
int j = nums.length-1;
if(i!=-1){
while(nums[j]<=nums[i])
{
j--;
}
swap(nums, i, j);
}
j = nums.length-1;
i++;
while(i<j){
swap(nums,i,j);
i++;
j--;
}
}
public void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}