1.题目
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
2.思路
初始数是”1“,我们读 1个1, 所以第二个数是 11;
”11“ 读起来是 2个1, 所以第三个数是”21“;
”21“读起来是 1个2 1个1, 所以第四个数是 ”1211“ 。。。
所以其实下一个数其实就是上一个数 每个数连续出现的个数 + 该数
class Solution {
public:
string next(string s) {
string ans;
int count = 1; // 记录当前要读的数的个数
if (s.size() == 1)
return "11";
for (int i = 1; i < s.size(); i++) {
if (s[i] == s[i - 1])
count++;
else {
ans += to_string(count);
ans.push_back(s[i - 1]);
count = 1;
}
}
ans += to_string(count);
ans.push_back(s[s.size() - 1]);
return ans;
}
string countAndSay(int n) {
string ans = "1";
while(--n){
ans = next(ans);
}
return ans;
}
};