# 【LeetCode】 38. Count and Say ## Description > The count-and-say sequence is the sequence of integers with the first five terms as following: > 1. 1 > 2. 11 > 3. 21 > 4. 1211 > 5. 111221 > 1 is read off as "one 1" or 11. > 11 is read off as "two 1s" or 21. > 21 is read off as "one 2, then one 1" or 1211. > Given an integer n where 1 ≤ n ≤ 30, generate the nth term of the count-and-say sequence. > Note: Each term of the sequence of integers will be represented as a string. > "數說數列"是一個數列,它的的前五項為: > 1. 1 > 2. 11 > 3. 21 > 4. 1211 > 5. 111221 > 1 讀作"一個一",所以表示為 11 > 11 讀作"兩個一",所以表示為 21 > 21 讀作"一個二然後一個一",所以表示為 1211 > 給予一個整數n,且1 ≤ n ≤ 30,請產生第n個數說數列的項。 > 注意:每一項回傳的型態請轉為字串。 ## Example: ``` Example 1: Input: 1 Output: "1" Example 2: Input: 4 Output: "1211" ``` ## Solution * 這一題難在要看懂題目... * 去做字串分析,觀察連續相同的字元有幾個,然後拼接成新的字串即可。 ### Code ```C++=1 class Solution { public: string nextStr(string s) { string ans = ""; char c = s.front(); int count=1; for(int i=1;i<s.size();i++) { if(c==s[i]) count++; else { ans+=(char)(count+'0'); ans+=c; c=s[i]; count = 1; } } ans+=(char)(count+'0'); ans+=c; return ans; } string countAndSay(int n) { string ans="1"; for(int i=1;i<n;i++) ans=nextStr(ans); return ans; } }; ``` ###### tags: `LeetCode` `C++`