这道题的思路是从后往前历遍,找到第一个非递增的数,然后和后面的数里大于它的最小数交换,然后对后面的数排序即可,如果全部是从前往后递减,则对整个数排序
class Solution11 {
public void nextPermutation(int[] num) {
int i = num.length-1;
while(--i>=0){
if(num[i]<num[i+1]){
int min = num[i+1];
int ind = i+1;
for(int j=i+2;j<num.length;j++){
if(num[j]<min&&num[j]>num[i]){
min=num[j];
ind=j;
}
}
int tmp = num[ind];
num[ind]=num[i];
num[i]=tmp;
if(i+1<num.length)
Arrays.sort(num,i+1,num.length);
return;
}
}
Arrays.sort(num);
return;
}
}
本文介绍了一个寻找整数序列中下一个更大排列的算法实现。通过从后向前遍历找到第一个破坏升序规律的元素,并与后面比它稍大的最小元素进行交换,之后对交换后的子序列进行排序以得到下一个更大的排列。若不存在这样的排列,则返回最小排列。
670

被折叠的 条评论
为什么被折叠?



