报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
- 1
- 11
- 21
- 1211
- 111221
1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1″ (”一个二” , “一个一”) , 即 1211。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: "1" 示例 2: 输入: 4 输出: "1211"
class Solution { public: //题目有点晕,但最终是递归。搜了一下,居然有非递归版本,但是没有看懂。直接计算相同数字个数,写字符串即可。。。 string countAndSay(int n) { if(n==1) return "1"; if(n==2) return "11"; string lastResult=countAndSay(n-1); string result; char lastchar=lastResult[0]; int count=1; for(int i=1;i!=lastResult.size();++i) { if(lastResult[i]!=lastchar) { result+=to_string(count); result.push_back(lastchar); lastchar=lastResult[i]; count=1; } else count++; if(i==lastResult.size()-1) { result+=to_string(count); result.push_back(lastchar); count=0; return result; } } return result; } };