n-1为迭代的次数,字符串num初始为"1".
每次迭代就开始数字符串中数字的个数,有一个trick是,当 当前数字与前一位(高位)不同时就停止计数:
所以1211的下一个字符串应该是111221(1个1, 1个2, 2个1), 而不是1231(而不是1个2, 3个1).
代码:
class Solution
{
public:
string countAndSay(int n)
{
string num("1"), next_num;
for (int i = 1; i < n; ++ i)
{
int cnt = '0', last = num[0];
next_num.clear();
for (size_t j = 0; j < num.size(); ++ j)
{
if (num[j] == last)
{
++ cnt;
} else
{
next_num += cnt;
next_num += last;
cnt = '1';
last = num[j];
}
}
next_num += cnt;
next_num += last;
num = next_num;
}
return num;
}
};