31. 下一个排列
题目链接
找规律
- 从后往前找,找到在数组末位的最长的逆序子数据,子数组的前一位就是要变的位置
- 要将前一位替换成逆序子数组中最小的比它大的数,然后将逆序子数组排序即可
- 特殊情况:全部逆序,包括数组长度为1,都直接返回有序数组即可
class Solution {
public void nextPermutation(int[] nums) {
int len = nums.length;
if(len == 1) return;
int i;
for(i = len - 1; i > 0 && nums[i] <= nums[i-1]; i--);
if(i == 0){
Arrays.sort(nums);
return;
}
i--;
int j;
for(j = len - 1; j >= i && nums[j] <= nums[i]; j--);
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
Arrays.sort(nums, i+1, len);
}
}
31. 下一个排列
题目链接
找规律
- 从后往前找,找到在数组末位的最长的逆序子数据,子数组的前一位就是要变的位置
- 要将前一位替换成逆序子数组中最小的比它大的数,然后将逆序子数组排序即可
- 特殊情况:全部逆序,包括数组长度为1,都直接返回有序数组即可
class Solution {
public void nextPermutation(int[] nums) {
int len = nums.length;
if(len == 1) return;
int i;
for(i = len - 1; i > 0 && nums[i] <= nums[i-1]; i--);
if(i == 0){
Arrays.sort(nums);
return;
}
i--;
int j;
for(j = len - 1; j >= i && nums[j] <= nums[i]; j--);
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
Arrays.sort(nums, i+1, len);
}
}