OJ題 字串的排列 全排列問題

2021-10-08 20:39:45 字數 943 閱讀 7067

題目描述

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

解法一:

c++中本身有全排列的函式 next_permutation()

標頭檔案函式原型:  bool next_permutation(iterator start,iterator end)
函式next_permutation()是本身就是按照字典序產生排列的,也不需要重新排序,直接返回就行。next_permutation() 函式其他用法可參考:

這裡

class solution while(next_permutation(str.begin(), str.end()));

return res;}};

解法二:

遞迴我們可以把目標串理解成兩部分:

第一部分:以哪個字元開頭

第二部分:剩下的是子問題

我們要讓每個字元都要做一遍開頭,然後在求解子問題

**實現如下:

class solution 

bool i***ist(string &str, vector&res)

}return false;

}void permutationhelper(string &str, int start, vector&res)

return;

}for(int i = start; i < str.size(); i++)

}vectorpermutation(string str)

};

演算法題 字串的全排列

問題 編寫乙個函式,用它把字串中所有的字元的各種排列形式全部顯示出來,即用給定字元做全排列。如 比如給定字串 hat 函式輸出全排列 tha,aht,tah,ath,hta,hat.演算法如下 void dopermute char in,char out,int used,int length,i...

字串的排列 全排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。使用itertools中的permutations,可以實現全排列 ...

字串全排列問題

全排列問題 給定字串 abc,全排列為 abc,acb,bac,bca,cab,cba 遞迴實現 1 標記訪問狀態陣列 val,當前所儲存的字串物件 tmp,儲存結果陣列 res 2 思路 2.1 每次從 0 到 str.length 1,選擇未被訪問的字元加入到 tmp 中,標記當前字元為已訪問 ...