题目描述
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1
11
21
1211
- 111221
1 被读作 “one 1” (“一个一”) , 即 11。
11 被读作 “two 1s” (“两个一”), 即 21。
21 被读作 “one 2”, “one 1” (”一个二” , “一个一”) , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: “1”
示例 2:
输入: 4
输出: “1211”
解法1:迭代
以第一项为基准,开始迭代,
根据题意记录连续的字符个数和字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class Solution { public: string countAndSay(int n) { string res[31]; res[1]="1"; res[2]="11"; if(n<=2) return res[n]; int i,j; int k; char ch; char a; for(i=3;i<=n;i++) { k=0; a=res[i-1][0]; for(j=0;j<res[i-1].length();) { if(res[i-1][j]==a) { k++; j++; } else { ch=k+'0'; if(k>0) res[i]=res[i]+ch+a; a=res[i-1][j]; k=0; } } ch=k+'0'; if(k>0) res[i]=res[i]+ch+a; } return res[n]; } };
|