題目
給定一個(gè)正整數(shù) n(1 ≤ n ≤ 30)瘤礁,輸出外觀數(shù)列的第 n 項(xiàng)。
注意:整數(shù)序列中的每一項(xiàng)將表示為一個(gè)字符串柜思。
「外觀數(shù)列」是一個(gè)整數(shù)序列,從數(shù)字 1 開始号枕,序列中的每一項(xiàng)都是對(duì)前一項(xiàng)的描述陨享。前五項(xiàng)如下:
1
11
21
1211
111221第一項(xiàng)是數(shù)字 1
描述前一項(xiàng),這個(gè)數(shù)是 1 即 “一個(gè) 1 ”霉咨,記作 11
描述前一項(xiàng),這個(gè)數(shù)是 11 即 “兩個(gè) 1 ” 途戒,記作 21
描述前一項(xiàng),這個(gè)數(shù)是 21 即 “一個(gè) 2 一個(gè) 1 ” 唁毒,記作 1211
描述前一項(xiàng),這個(gè)數(shù)是 1211 即 “一個(gè) 1 一個(gè) 2 兩個(gè) 1 ” 浆西,記作 111221
示例 1:
輸入: 1輸出: "1"解釋:這是一個(gè)基本樣例。示例 2:
輸入: 4輸出: "1211"解釋:當(dāng) n = 3 時(shí)诺核,序列是 "21"久信,其中我們有 "2" 和 "1" 兩組窖杀,"2" 可以讀作 "12"裙士,也就是出現(xiàn)頻次 = 1 而 值 = 2;類似 "1" 可以讀作 "11"腿椎。所以答案是 "12" 和 "11" 組合在一起,也就是 "1211"铆隘。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有肮帐。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處训枢。
解答及思路
? ? ? ? 本題的意思除了開始的字串外,每次讀取上一個(gè)字串完成新的字串睦刃。完成的規(guī)則是依次讀取上一個(gè)字串的字符十酣,記錄每次一共有幾個(gè)一樣的連一起涩拙,如“1”的下一個(gè)字串意味著一個(gè)一耸采,即“11”,再下一個(gè)是兩個(gè)一搓彻,即“21”,再下一個(gè)為一個(gè)二一個(gè)一旭贬,即為“1211”。依照這個(gè)意思遞歸遍歷上一個(gè)字串稀轨,按照這個(gè)原則即可簡單實(shí)現(xiàn)。
源碼
class Solution {
? ? public String countAndSay(int n) {
? ? ? ? if(n==1)
? ? ? ? ? ? return "1";
? ? ? ? String s = countAndSay(n-1);
? ? ? ? int num = 1;
? ? ? ? char last = s.charAt(0);
? ? ? ? StringBuilder ret = new StringBuilder();
? ? ? ? for(int i = 1;i<s.length();i++){
? ? ? ? ? ? if(last == s.charAt(i)){
? ? ? ? ? ? ? ? num++;
? ? ? ? ? ? }
? ? ? ? ? ? if(last != s.charAt(i)){
? ? ? ? ? ? ? ? ret.append(num);
? ? ? ? ? ? ? ? ret.append(last);
? ? ? ? ? ? ? ? last = s.charAt(i);
? ? ? ? ? ? ? ? num = 1;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ret.append(num);
? ? ? ? ret.append(last);
? ? ? ? return ret.toString();
? ? }
}
、