首页 > 代码库 > 字符全排列
字符全排列
问题一:对字符串s,输出字符串S中字符的所有排列。例如:输入字符串"abc",其全排列是abc,acb,bac,bca,cab,cba;
方法一:这是一个深度优先搜索的过程。
void dfs(vector<string> &result,string & path,string s,int len){ if(len==s.size()) { result.push_back(path); return; } for(int i=0;i<s.size();i++) { if(path.find(s[i])==-1) { path.push_back(s[i]); dfs(result,path,s,len+1); path.pop_back(); } }}int main(){ string str="abc"; vector<string> result; string path; dfs(result,path,str,0);}
方法二:递归的过程:首先求所有可能出现在第一个位置的字符,也就是把第一个字符与后面的所有字符交换。其次,固定第一个字符,求后面字符的全排列,也就是把第二个字符与后面的所有字符交换。一直递归下去。
void permutation(char *s,char *sbegin){ if(*sbegin==‘\0‘) cout<<s<<endl; else { for(char *p=sbegin;*p!=‘\0‘;p++) { swap(*sbegin,*p); permutation(s,sbegin+1); swap(*sbegin,*p); } }}int main(){ char s[]="abc"; permutation(s,s);}
字符全排列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。