码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode31 下一个排列 字典序

时间:2019-11-03 14:33:49      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:排列   pre   序列   例子   就是   vector   style   wap   swap   

数字的字典序就是比大小

先想几个例子  123_>132  1243-> 1324 ,12453-> 12534

 

1.不可排的序列就是降序序列

2.两个相同长度的串比大小,前面相同,比较第一个长度不同的字符,且越靠后越是比原来串大的小串

因为降序已经不可再排,并且字符越靠后影响越小,于是找到降序序列左侧第一个数字(最靠后)A[i],因为要整体字典序变大就与降序序列中刚好比他大的数字交换

此时得到的字典序比原来大,但是并不是最小的。重新排列A[i+1]--A[len-1],升序排列。这样得到比原来串大的最小串。

 

于是

1.倒着找到A[i]

2.二分找到要交换的数字

3.交换,重拍

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        if (nums.size() > 1) {
            int i;
            for (i = nums.size() - 2; i > 0 && nums[i] >= nums[i+1]; i--);
            
            if(i==0&&nums[i]>=nums[i+1]){
                reverse(nums.begin(), nums.end());
                return;
            }
            reverse(nums.begin() + i+1, nums.end());
            auto it = upper_bound(nums.begin() + i+1, nums.end(), nums[i]);
            swap(nums[i], *it);
        }
        return;
    }
};

 

leetcode31 下一个排列 字典序

标签:排列   pre   序列   例子   就是   vector   style   wap   swap   

原文地址:https://www.cnblogs.com/lqerio/p/11785894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!