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.
思路:这道题的意思对于英语不好的人来说简直让人崩溃,根本就看不明白题目是什么意思/(ㄒoㄒ)/~~
后来看了别人的分析才恍然大悟,知道了题目意思以后就觉得题目没那么难了,这道题的意思是让求第N个序列。
当 n=1: 1
当 n=2: 11 (对n=1时的序列的描述:1个1)
当 n=3: 21 (对n=2时的序列的描述:2个1)
当 n=4: 1211 (对n=3时序列的描述:1个2,1个1)
.................
一次类推。
代码如下:
class Solution {
public:
string countAndSay(int n) {
if (n < 1)
return "";
string prev = "1";
for (int i = 2;i <= n;i++) {
char curChar = prev[0];
int time = 1;
string res;
prev.push_back('*'); //增加一个字符(*)是为了处理最后一个边界字符的情况
for (int k = 1;k < prev.size();k++) {
if (prev[k] == curChar)
time++;
else
{
res += to_string(time);
res.push_back(curChar);
curChar = prev[k];
time = 1;
}
}
prev = res;
}
return prev;
}
};