这道题是要你求一个数组全排列(permutation)的下一个排列,没有什么算法
参考的题目解析:
https://www.cnblogs.com/grandyang/p/4428207.html
http://www.cnblogs.com/eudiwffe/p/6260699.html
需要注意的是,如果是全倒序就要全部反过来直接输出,比如321是全倒序,要输出123;511是全倒序,要输出115。
提交代码:
class Solution {
public void nextPermutation(int[] nums) {
if(nums.length==0||nums.length==1) return;
int pos,tmp,j=nums.length-1,i=j-1;
//find i and j
while(nums[i]>=nums[j]&&i>0)
i--;j--;
if(nums[i]>nums[j]) { //全是逆序
for(pos=0;pos<nums.length/2;pos++) {
tmp=nums[pos];
nums[pos]=nums[nums.length-1-pos];
nums[nums.length-1-pos]=tmp;
}
return;
}
//find k
int k=nums.length-1;
for(pos=nums.length-1;pos>=j;pos--) {
if(nums[pos]>nums[i]) {
k=pos;
break;
}
}
//swap i and k
tmp=nums[i];
nums[i]=nums[k];
nums[k]=tmp;
//converse (i,end)
for(pos=1;pos<=(nums.length-i)/2;pos++) {
tmp=nums[i+pos];
nums[i+pos]=nums[nums.length-pos];
nums[nums.length-pos]=tmp;
}
}
}
运行结果: