劍指Offer- 字符串的排列

題目描述 [字符串的排列]

輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來的所有字符串a(chǎn)bc,acb,bac,bca,cab和cba。

輸入描述:

輸入一個(gè)字符串,長度不超過9(可能有字符重復(fù)),字符只包括大小寫字母。

解題思路

  • 深度優(yōu)先搜索,當(dāng)序列中的元素不重復(fù)時(shí),存在 n! 種不同的排列;
  • 考慮第一個(gè)位置,有 n 種可能
  • 當(dāng)選定了第一個(gè)位置,第二個(gè)位置有 n-1 種可能
  • 因?yàn)槊看嗡阉鞯臓顟B(tài)數(shù)是遞減的,所以這里的 dfs 是一個(gè)循環(huán)遞歸的過程

代碼

class Solution {
public:
    void Permutation(vector<string> &res, string &str, int low, int high) {
        if(low==high) res.push_back(str);

        for(int i=low;i<=high;i++){
            if(i!=low && str[i]==str[low]) continue;
            swap(str[i], str[low]);
            Permutation(res, str, low+1, high);
            swap(str[i], str[low]);
        }
    }

    vector<string> Permutation(string str) {
        vector<string> res;
        if(str.size()==0) return res;
        Permutation(res, str, 0, str.size()-1);
        sort(res.begin(), res.end());
        return res;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 寫在前面: 最近遇到了一道題涉及全排列的。記得之前在《劍指offer》上遇到了一道類似的題。因此今早把這道題翻了出...
    BlueSkyBlue閱讀 691評(píng)論 0 0
  • 本文首發(fā)于我的個(gè)人博客:尾尾部落 題目描述 輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串...
    繁著閱讀 533評(píng)論 1 2
  • 題目描述:輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所...
    大數(shù)據(jù)Zone閱讀 369評(píng)論 0 1
  • 題目:輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排...
    Kur1ko丶閱讀 211評(píng)論 0 0
  • 題目:輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排...
    qming_c閱讀 503評(píng)論 0 0

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