每天一道算法题(39)——含有重复字符的全排列
生活随笔
收集整理的這篇文章主要介紹了
每天一道算法题(39)——含有重复字符的全排列
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
思路
(1)對(duì)于含有重復(fù)字符的全排列必須使用isSwap函數(shù)
(2)整體思路
?????a,交換當(dāng)前子字符串(i----n-1)字符與子字符串后面的每一個(gè)位置的字符(滿足交換條件下)
?????b,子字符串位置后移(i+1-----n)。遞歸處理子字符串
?????c,將a中的交換復(fù)原。
代碼
#include <iostream> #include"string" using namespace std; void swap(char& a,char& b){//交換char temp=a;a=b;b=temp; } //***************************判斷是否交換**********************************************************// //當(dāng)前需要交換的位置為m, 被交換的字符位置為n ,則s[n]應(yīng)該異于s[m]---s[n-1]之間的任意一個(gè)字符 bool isSwap(string s,int m,int n){for(int i=m;i<n;i++)if(s[i]==s[n])return false;return true; }//遞歸全排列 void permute(string s,int n){if(n+1==s.length()){cout<<s<<endl;return;}permute(s,n+1);char temp;for(int i=n+1;i<s.length();i++){if(isSwap(s,n,i)){swap(s[n],s[i]);permute(s,n+1);swap(s[n],s[i]);}} } void main(){string s("12233");permute(s,0); }轉(zhuǎn)載于:https://www.cnblogs.com/engineerLF/p/5392960.html
總結(jié)
以上是生活随笔為你收集整理的每天一道算法题(39)——含有重复字符的全排列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纯后台生成highcharts图片有哪些
- 下一篇: CLR VIA