按照字典序生成全排列

說(shuō)到排列,肯定先想到生成排列,這一節(jié)講如何按照字典序法生成數(shù)字的全排列或者某一排列的下一排列。

原理如上,給個(gè)題目如何?
題目傳送門
題意很簡(jiǎn)單,代碼如下:

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    string s;
    while(cin>>s)
    {
        if(s[0]=='#')   
        break;
        int key=-1;
        int len=s.length();
        for(int i=len-1;i>0;i--)
        {
            if(s[i]>s[i-1])    //這里找到最后一組升序?qū)?            {
                key=i-1;
                break;
            }
        }
        
         if(key==-1)
            {
                cout<<"No Successor"<<endl; //如果沒找到的話說(shuō)明已經(jīng)是最后一個(gè)排列了
                continue;
            }
        else 
        {
            for(int i=len-1;i>key;i--)
            {
                if(s[i]>s[key])     //按照原理找到最后一個(gè)大于s[i]的數(shù)
                {
                    //cout<<i<<" "<<key<<endl;
                    char c=s[i];
                    s[i]=s[key];
                    s[key]=c;
                    break;
                }
            }
            char ch[1000];
            for(int i=key+1;i<len;i++)
            ch[i]=s[i];
            for(int i=key+1;i<len;i++)
            s[i]=ch[len-i+key];
            cout<<s<<endl;
        }
    }
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容