LC 31 Next Permutation(M)
解题思路
public void nextPermutation(int[] nums) {
if(nums == null || nums.length < 2){
return;
}
int len = nums.length;
// find first n[i] < n[i+1]
for(int i = len - 2; i>=0; i--){
if(nums[i] < nums[i+1]){
// find from end first n[j] > n[i]
for(int j = len - 1; j>i; j--){
if(nums[j]> nums[i]){
swap(nums, i, j);
reverse(nums, i+1, len -1);
return;
}
}
}
}
reverse(nums, 0, len - 1);
}
public void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public void reverse(int[] nums, int l, int h){
while(l<h){
swap(nums, l++, h--);
}
}Last updated