题目描述:
想法:
找到下一个比当前大的排列。比当前大的排列可能有很多,这里找的是下一个。更多细节看代码注释
代码:
class Solution {
public void nextPermutation(int[] nums) {
int len = nums.length;
for(int i = len - 2; i >= 0; i--){
int index = -1;
int min = 101; //nums[i] 最大100,最小0, min 只要大于100即可
for(int j= i + 1; j < len; j++){
// 查找 [i + 1, len)区间大于 nums[i],且nums[j] - nums[i] < min的nums[j]。
if(nums[j] > nums[i] && nums[j] - nums[i] < min){
min = nums[j] - nums[i];
index = j;
}
}
//找到合适的nums[j],交换nums[i] 和 nums[j]
if(index != -1){
int temp = nums[i];
nums[i] = nums[index];
nums[index] = temp;
Arrays.sort(nums, i + 1, len); // 排序的目的是保证这个排列是下一个。
return;
}
}
Arrays.sort(nums);
}
}