zoukankan      html  css  js  c++  java
  • Next Permutation

        该算法还是比较简单的。一共分为三步,即:1. 找位置;2. 交换;3. 倒序。下面结合具体例子{3,7,9,8,6,2}来进行说明。

        1. 找位置。从末尾开始往前找到第一个降序的位置。如上述例子中,第一个降序的位置为1,值为7。再从该位置的后面部分找到从后往前找到第一个比该值大的数,即8,位置为3.

        2. 交换。对上述找到的位置的值进行交换。序列变成了{3,8,9,7,6,2}。

        3. 倒序。对第一个降序位置后面的部分进行倒序,即把{9,7,6,2}倒序为{2,6,7,9}。

        代码如下:

    class Solution {
    public:
        void nextPermutation(vector<int> &num) {
            int p,q,i,t=0;
            int guard;
            int N=num.size();
            if(num.size()<2)
                return;
            p=N-1;
            while(p>0&&num[p-1]>=num[p])
            {
                p--;
            }
            p--;
            
            if(p>=0)
            {
                for(i=N-1;i>p;i--)
                {
                    if(num[i]>num[p])
                    {
                        break;
                    }
                }
                t=num[p];
                num[p]=num[i];
                num[i]=t;
            }
            p=p+1;
            q=N-1;
            while(p<q)
            {
                t=num[p];
                num[p]=num[q];
                num[q]=t;
                p++;q--;
            }
        }
    };
    

      

  • 相关阅读:
    vue-路由传参
    ES6模板字符串
    es6中Set和Map数据结构
    本周面试题
    var、let和const定义变量的特点
    修改this的指向
    Echarts图表插件
    ES6学习
    swiper插件学习
    每日刷题4
  • 原文地址:https://www.cnblogs.com/zhizhizhiyuan/p/3533405.html
Copyright © 2011-2022 走看看