zoukankan      html  css  js  c++  java
  • [leetcode]Next Permutation

    下一排列TAT

     

    从右往左找到第一个非增的位置,也就是找到最右递减的开始位置的前一个。

    定位这个。

    然后又从右往左找比这个数大的。。。

    交换着两个数。。

    然后reverse之前的递减序列。。。

    因为递减序列就木有next permutation了。。

    所以找到最右的递减序列

    那么前面那个肯定是要用比他大的代替啦,再反转递减序列,就是next permutation了

    class Solution {
    public:
        void nextPermutation(vector<int> &num) {
            int end = num.size() - 1;
            int povit = end;
            while(povit > 0){
                if(num[povit] > num[povit - 1]) break;
                povit --;
            }
            if(povit > 0){
                povit --; 
                int large = end;
                while(num[large] <= num[povit]) large --;
                swap(num[large] , num[povit]);
                reverse(num.begin() + povit + 1 , num.end());
            }else{
                reverse(num.begin() , num.end());
            }
        }
    };
  • 相关阅读:
    Python文件的两种用途
    模块的搜索路径
    循环导入问题
    import和from...import
    模块的四种形式
    函数小结
    面向过程编程
    内置函数
    匿名函数
    递归
  • 原文地址:https://www.cnblogs.com/x1957/p/3511314.html
Copyright © 2011-2022 走看看