题目
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:
1 2 3 4 5
| 1. 1 2. 11 3. 21 4. 1211 5. 111221
|
1
被读作 "one 1"
("一个一"
) , 即 11
。
11
被读作 "two 1s"
("两个一"
), 即 21
。
21
被读作 "one 2"
, “one 1"
("一个二"
, "一个一"
) , 即 1211
。
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
注意:整数序列中的每一项将表示为一个字符串。
示例 1:
1 2 3
| 输入: 1 输出: "1" 解释:这是一个基本样例。
|
示例 2:
1 2 3
| 输入: 4 输出: "1211" 解释:当 n = 3 时,序列是 "21",其中我们有 "2" 和 "1" 两组,"2" 可以读作 "12",也就是出现频次 = 1 而 值 = 2;类似 "1" 可以读作 "11"。所以答案是 "12" 和 "11" 组合在一起,也就是 "1211"。
|
Related Topics
字符串
解答
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
class Solution { public String countAndSay(int n) { StringBuilder s = new StringBuilder(); int p1 = 0; int cur = 1; if ( n == 1 ) return "1"; String str = countAndSay(n - 1); for ( cur = 1; cur < str.length(); cur++ ) { if ( str.charAt(p1) != str.charAt(cur) ) { int count = cur - p1; s.append(count).append(str.charAt(p1)); p1 = cur; } } if ( p1 != cur ){ int count = cur - p1; s.append(count).append(str.charAt(p1)); } return s.toString(); }
}
|