描述:
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
思想:
从右边的 i = nums.length-1 起,扫描到nums[i-1] = nums[i] ,则停止;继续从右边的 j = nums.length-1 起,扫描到第一个大于nums[i-1]的数停止;然后交换nums[i-1]和nums[j];最后把i-1右边的数反转。
import java.util.Arrays;
class Solution {
public void nextPermutation(int[] nums) {
if(nums==null || nums.length==0) {
return;
}
int index = -1;
for(int i=nums.length-1;i>=1;i--) {
if(nums[i-1]<nums[i]) {
index = i-1;
break;
}
}
if(index==-1) {
Arrays.sort(nums);
}else{
int t = -1;
for(int i=nums.length-1;i>=index;i--) {
if(nums[i]>nums[index]) {
t = i;
break;
}
}
int temp = nums[t];
nums[t] = nums[index];
nums[index] = temp;
int i=index+1;
int j=nums.length-1;
while(i<j) {
int tm = nums[i];
nums[i] = nums[j];
nums[j] = tm;
i++;
j--;
}
}
}
}
网友评论