11.10每日一题
31. 下一个排列
题目是要求找出字典序中的下一个更大的排列,如果没有下一个排列,则数字应该是按照从大到小的顺序排列的,所以如果有的话一定是有一个“小数”拍到了“大数”前面,所以第一步就是从后往前找到第一个”小数“,然后将它和后面的第一个比他大的数交换,最后再将后面的数字进行排序就可以了。
class Solution {
public void nextPermutation(int[] nums) {
if(nums.length == 0 || nums == null){
return;
}
int i = nums.length - 1;
int j = nums.length - 2;
while(j >= 0 && nums[j] >= nums[i]){
j--;
i--;
}
if(j >= 0 ){
int k = nums.length - 1;
while(nums[j] > nums[k]){
k--;
}
int tmp = nums[k];
nums[k] = nums[j];
nums[j] = nums[k];
}
Arrays.sort(nums, j + 1, nums.length);
}
}