-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path报数.cpp
83 lines (73 loc) · 1.36 KB
/
报数.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <utility>
using namespace std;
/*
这题就是统计几个数字相同
但练习了几个不常用的用法:
1.利用to_string(int) -> 就是将int转换为string。如果Int<10的话,还可以通过int + '0' 来转换成string。
2.string是一种容器,其是由char组成。可以对string使用=,也可以对char使用=。
3.利用typeid(xx).name()来查查xx的类型。
*/
class Solution
{
public:
string countAndSay(int n)
{
vector<string> res{ "1" };
for (int i = 1; i < n ; ++i)
{
string lastStr = res.back();
string newStr;
int j = 0, sameNum = 1;
while (j < lastStr.size())
{
if (lastStr[j + 1] == lastStr[j])
{
++sameNum;
}
else
{
newStr = newStr + to_string(sameNum) + lastStr[j];
sameNum = 1;
}
++j;
}
res.push_back(newStr);
}
return res.back();
}
//
string countAndSay(int n)
{
string s = "1";
for (int i = 2; i <= n; ++i)
{
int j = 0;
string tmp = "";
while (j < s.size())
{
int num = 0;
char each_char = s[j];
while (each_char == s[j])
{
num++;
j++;
}
tmp += to_string(num) + each_char;
}
s = tmp;
}
return s;
}
};
int main()
{
Solution a;
cout << a.countAndSay(20) << endl;
system("pause");
}