Next Permutation
生活随笔
收集整理的這篇文章主要介紹了
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--;}} };
轉載于:https://www.cnblogs.com/zhizhizhiyuan/p/3533405.html
總結
以上是生活随笔為你收集整理的Next Permutation的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器User-Agent的详细信息
- 下一篇: rpm 制作