分析
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
第一行的读音为1个1,所以多2行就是11;
第二行的读音为2个1,所以第3行就是21;
第三行的读音是1个2、1个1,所以第4行就是1211;
第四行的读音是1个1、1个2、2个1,所以第5行就是111221;
以此类推。
代码
外观数列是依据读音生成下一行数字的,读音的方法就是连续相同的数字一起读(例如11读作2个1)。
string countAndSay(int n)
{
string s = "1";
for (int i = 1; i < n; ++i)
{
int count = 1; //重复分数,最小是1
string tmp = "";
for (int j = 0; j < s.size(); ++j)
{
if (s[j] == s[j + 1])
{
++count;
}
else
{
tmp += to_string(count) + s[j];
count = 1;
}
}
s = tmp; //更新第i行值,并一次生成下一行的值
}
return s;
}
测试用例
示例 1:
输入: 1
输出: “1”
解释:这是一个基本样例。
示例 2:
输入: 4
输出: “1211”
解释:当 n = 3 时,序列是 “21”,其中我们有 “2” 和 “1” 两组,“2” 可以读作 “12”,也就是出现频次 = 1 而 值 = 2;类似 “1” 可以读作 “11”。所以答案是 “12” 和 “11” 组合在一起,也就是 “1211”。