字串的排列

許佳佳233發表於2017-03-23

題目

輸入一個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。

解析

我們可以把字串看成由兩個部分組成:第一部分為它的第一個字元,第二部分為後面的所有字元。如此就可以遞迴。
當然遞迴的時候一定不要忘了回溯。

結果

這裡寫圖片描述

程式碼

#include<iostream>
using namespace std;

void Permutation(char* s,char* begin){
    if(*begin=='\0')
        cout<<s<<endl;
    else
    {
        for(char* p=begin;*p!='\0';p++)
        {
            char temp=*p;
            *p=*begin;
            *begin=temp;

            Permutation(s,begin+1);

            //此處回溯
            temp=*p;
            *p=*begin;
            *begin=temp;
        }
    }

}

int main()
{
    char c[100];
    cin>>c;

    cout<<"結果:"<<endl;
    Permutation(c,c);
    return 0;
}

相關文章