class Solution {
public void nextPermutation(int[] nums) {
if(nums == null || nums.length < 2) return;
int[] n = findLastSmall(nums);
if(n[0] == -1) {
Arrays.sort(nums);
return;
}
//2.调换这两个位置的数 然后 重新排序第一个位置后面的所有数;
int temp = nums[n[0]];
nums[n[0]] = nums[n[1]];
nums[n[1]] = temp;
Arrays.sort(nums,n[0] + 1,nums.length);
}
//思路 1.从后往前找 找到第一个不是大于后面每一个数的 和 从后往前 第一个比他大的数 把这两个位置传回去
private int[] findLastSmall(int[] nums) {
int len = nums.length;
for(int i = len - 2; i >= 0; i--) {
for(int j = len - 1; j > i; j--) {
if(nums[i] < nums[j]) {
return new int[]{i, j};
}
}
}
return new int[]{-1,0};
}
}
Next Permutation
最新推荐文章于 2023-05-10 17:27:18 发布