The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 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 term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
题意基本很明确要用到递归了,每次输出的都是对上一个字符串的操作结果。
rumtime 6ms
做题时间30min
主要浪费时间的地方是在string.append这个函数上了,还是java用的太多。。在用append函数时候,参数直接就count+""了,以为可以自动转换成字符串,然后跑了几次都不行。。最后百度了一下,发现需要to_string(),哎。。。。
class Solution {
public:
string countAndSay(int n) {
string res = "";
countAndSay(res, n);
return res;
}
void countAndSay(string &s,int n)
{
if (n==1)
{
s = "1";
}
else if (n == 2)
{
s = "11";
}
else
{
countAndSay(s, n - 1);
string res = "";
int c = s[0] - '0', count = 1;
for (int i = 1; i < s.length(); i++)
{
if (c != s[i]-'0')
{
res.append(to_string(count)+ to_string(c));
count = 1;
c = s[i]-'0';
if (i == s.length() - 1)
{
res.append(to_string(count) + to_string(c));
break;
}
continue;
}
if (i == s.length() - 1 && c == s[i]-'0')
{
count++;
res.append(to_string(count) + to_string(c));
}
else
{
count++;
}
}
s = res;
}
}
};
大家对此题好评如潮啊,:)