題目描述
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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 中,標記當前字元為已訪問 ...