问题一:对字符串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); }
时间: 2024-10-11 05:58:08