public class Solution {
/**
* @param nums: an array of integers
* @return: return nothing (void), do not return anything, modify nums in-place instead
*/
public int[] nextPermutation(int[] nums) {
int m = nums.length;
int i = 0;
for(i = m-1;i>=1;i--){
if(nums[i] > nums[i - 1]){ /*从后往前找到拐点,即后一个点比前一个点大,前一个点为拐点**/
/*在拐点之后找一个最小的数(这个数要比拐点大)*
* 将这个数与拐点交换*
* 再对拐点之后的数排序*/
int min = nums[i];
int index = i;
for(int k = i;k<m;k++){
if(nums[k] <= min && nums[k] > nums[i - 1]){
min = nums[k];
index = k;
}
}
int temp = nums[ i - 1];
nums[i - 1] = nums[index];
nums[index] = temp;
Arrays.sort(nums, i, nums.length);/*对拐点之后的数排序***/
break;
}
}
if(i == 0){
Arrays.sort(nums);
}
return nums;
}
}
[LintCode] 52. Next Permutation
最新推荐文章于 2021-10-20 19:54:19 发布