1. 思路
这个题目有点绕口,不好理解。
其实意思就是告诉你第一项为1,第二项就是对第一项报数,第n项的结果就是对前一项报数。
报数的规则如题。
这种用递归做代码再简单不过了,由于是尾递归,所以也没有栈开销。
2.代码
class Solution {
public:
string countAndSay(int n) {
return n == 1 ? "1" : say(countAndSay(n - 1));
}
string say(string s)
{
string ret = "";
for(int i = 0; i < s.length();)
{
int j = i;
while((++j) < s.length())
{
if(s[j] != s[i])break;
}
ret += '0' + j - i;
ret += s[i];
i = j;
}
return ret;
}
};