力扣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. 下一个排列的主要内容,如果未能解决你的问题,请参考以下文章

力扣31. 下一个排列

算法练习题力扣练习题——数组:下一个排列

leetcode-31

LeetCode下一个排列找规律

全排列--力扣

java刷题--31下一个排列