首页 > 代码库 > 字符串的排列组合
字符串的排列组合
1.字符串的组合
字符串的组合,有字符串abc,它的所有组合为a,b,c,ab,ac,abc。求字符串的组合可以使用递归的方法,程序如下:
void print(string &s,int start,vector<char> &t) { if(start==s.size()) { return ; } int i=0; for(i=start;i<s.size();++i) { t.push_back(s[i]); //使用递归+回溯的方法求组合 vector<char>::iterator iter=t.begin(); for(iter=t.begin();iter!=t.end();++iter) { cout<<*iter; } cout<<endl; print(s,i+1,t); t.pop_back(); } } void printsubsets(string &s) { if(s.size()==0) return ; vector<char> tmp; print(s,0,tmp); }用二进制的方法也可以求字符串的组合
void printsubsets2(string &s) { if(s.size()==0) return; int len=s.size(); int i=0; int tmp=1; for(i=0;i<len;++i) tmp<<=1; int j=0; for(i=1;i<tmp;++i) { for(j=0;j<len;++j) { if(i&(1<<j)) //查看二进制对应的为是否为1 cout<<s[j]; } cout<<endl; } }
2.字符串排列
有字符串"abc",它的所有排列是abc acb bac bca cab cba,求排列的程序如下:
void helper(string &s,int start) { if(start==s.size()) { cout<<s<<endl; return ; } int i=0; for(i=start;i<s.size();++i) { std::swap(s[start],s[i]); //交换后面的数字,递归求解排列 helper(s,start+1); std::swap(s[start],s[i]); } } void printpermutation(string &s) { if(s.size()==0) return ; helper(s,0); }简单的测试程序:
int main() { string s="abc"; printpermutation(s); //所有排列 printsubsets(s); //组合 printsubsets2(s); //用二进制方法求得的组合 system("pause"); return 0; }
字符串的排列组合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。