31. 下一个排列

1  2  7  4  3  1

下一个排列为:

1  3  1  2  4  7

那么是如何得到的呢,我们通过观察原数组可以发现,如果从末尾往前看,数字逐渐变大,到了2时才减小的,然后我们再从后往前找第一个比2大的数字,是3,那么我们交换2和3,再把此时3后面的所有数字转置一下即可,步骤如下:

1  2  7  4  3  1

1  2  7  4  3  1

1  3  7  4  2  1

1  3  1  2  4  7

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int i=nums.size()-2;
        while(i>=0&&nums[i+1]<=nums[i])i--;
        if(i>=0)
        {
            int j=nums.size()-1;
            while(nums[j]<=nums[i])j--;
            swap(nums[i],nums[j]);
        }
        reverse(nums.begin()+i+1,nums.end());
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更...
    Mage阅读 312评论 0 0
  • 题目描述: 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更...
    夜空中最亮的星_6c64阅读 181评论 0 0
  • 题目描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更...
    大数据Zone阅读 676评论 0 1
  • Implement next permutation, which rearranges numbers into...
    Kevifunau阅读 191评论 0 0
  • 西方情人节 星期二 阴 仁寿 奕含:复习《易经》师卦第七 跟读《庄子》逍遥游第一第1节 跟读《新概...
    朱砂紅塵阅读 228评论 1 0