Next Permutation
生活随笔
收集整理的這篇文章主要介紹了
Next Permutation
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ? 該算法還是比較簡(jiǎn)單的。一共分為三步,即:1. 找位置;2. 交換;3. 倒序。下面結(jié)合具體例子{3,7,9,8,6,2}來(lái)進(jìn)行說(shuō)明。
? ? 1. 找位置。從末尾開(kāi)始往前找到第一個(gè)降序的位置。如上述例子中,第一個(gè)降序的位置為1,值為7。再?gòu)脑撐恢玫暮竺娌糠终业綇暮笸罢业降谝粋€(gè)比該值大的數(shù),即8,位置為3.
? ? 2. 交換。對(duì)上述找到的位置的值進(jìn)行交換。序列變成了{(lán)3,8,9,7,6,2}。
? ? 3. 倒序。對(duì)第一個(gè)降序位置后面的部分進(jìn)行倒序,即把{9,7,6,2}倒序?yàn)閧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--;}} };
轉(zhuǎn)載于:https://www.cnblogs.com/zhizhizhiyuan/p/3533405.html
總結(jié)
以上是生活随笔為你收集整理的Next Permutation的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浏览器User-Agent的详细信息
- 下一篇: rpm 制作