Skip to content

Commit 05c4a0e

Browse files
author
wangxx
committed
写一个函数返回一个串的所有排列
1 parent 0646c20 commit 05c4a0e

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

AK-wang/A0002/permu.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*************************************************************************
2+
> File Name: permu.cpp
3+
> Author: wangxiaoxian
4+
> Mail: 634897019@qq.com
5+
> Created Time: Wed 03 Aug 2016 10:14:19 PM CST
6+
************************************************************************/
7+
//返回一个字符串所有的排列方式
8+
//代码来自:http://www.cricode.com/624.html
9+
10+
#include<iostream>
11+
#include <vector>
12+
using namespace std;
13+
14+
typedef vector<string> vs;
15+
16+
vs permu(string s){
17+
vs result;
18+
if(s == ""){
19+
result.push_back("");
20+
return result;
21+
}
22+
string c = s.substr(0, 1);
23+
vs res = permu(s.substr(1));
24+
for(int i=0; i<res.size(); ++i){
25+
string t = res[i];
26+
for(int j=0; j<=t.length(); ++j){
27+
string u = t;
28+
u.insert(j, c);
29+
result.push_back(u);
30+
}
31+
}
32+
33+
return result; //调用result的拷贝构造函数,返回它的一份copy,然后这个局部变量销毁(与基本类型一样)
34+
}
35+
36+
vs permu1(string s){
37+
vs result;
38+
if(s == ""){
39+
result.push_back("");
40+
return result;
41+
}
42+
for(int i=0; i<s.length(); ++i){
43+
string c = s.substr(i, 1);
44+
string t = s;
45+
vs res = permu1(t.erase(i, 1));
46+
for(int j=0; j<res.size(); ++j){
47+
result.push_back(c + res[j]);
48+
}
49+
}
50+
return result;
51+
}
52+
int main(){
53+
string s = "abc";
54+
vs res = permu1(s);
55+
for(int i=0; i<res.size(); ++i)
56+
cout<<res[i]<<endl;
57+
return 0;
58+
}

0 commit comments

Comments
 (0)