力扣31. 下一个排列
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣31. 下一个排列相关的知识,希望对你有一定的参考价值。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
next_permutation(nums.begin(),nums.end());
}
};
正规解法:
- 第一步从后往前找,找到从递增到减的分界点。
- 从该位置到最后找到比其大的最小的点,两者互换
- 互换后的,后面那一部分小到大排序。
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int i=nums.size()-1;
while(i&&nums[i-1]>=nums[i]) i--;
if(i<=0)
{
reverse(nums.begin(),nums.end());
}
else
{
int j=i;
while(j<nums.size()&&nums[j]>nums[i-1]) j++;
swap(nums[i-1],nums[j-1]);
reverse(nums.begin()+i,nums.end());
}
}
};
以上是关于力扣31. 下一个排列的主要内容,如果未能解决你的问题,请参考以下文章