/*
* 思路:从右向左,长度不断增长,找到第一个逆序的数(数从大到小排序)例如1,1,5,3,2则当长度增长到4时
* 数列范围为:1,5,3,2,将5,3,2排序,然后找到第一个比1大的数,然后与1互换,则得到了结果1,2,1,3,5
*/
public class Solution {
public void nextPermutation(int[] nums) {
if(nums==null||nums.length==0) return;
int len = nums.length;
int f = len - 1;
while(f>=0){
if(isSorted(nums, f, len)){
--f;
}else{
Arrays.sort(nums, f+1, len);
int r = f + 1;
for(int k=f+1;k<len;++k){
if(nums[f]<nums[k]){
r = k;
break;
}
}
int tmp = nums[f];
nums[f] = nums[r];
nums[r] = tmp;
return;
}
}
Arrays.sort(nums);
}
public boolean isSorted(int[] nums, int beign, int end){
int t = nums[beign];
for(int i=beign+1;i<end;++i){
if(t<nums[i]){
return false;
}
}
return true;
}
}
31 Next Permutation
最新推荐文章于 2021-04-26 22:10:51 发布