# 38_Count_and_Say ###### tags: `leetcode` ## Problem Statement The count-and-say sequence is a sequence of digit strings defined by the recursive formula: > countAndSay(1) = "1" > countAndSay(n) is the way you would "say" the digit string from countAndSay(n-1), which is then converted into a different digit string. To determine how you "say" a digit string, split it into the minimal number of groups so that each group is a contiguous section all of the same character. Then for each group, say the number of characters, then say the character. To convert the saying into a digit string, replace the counts with a number and concatenate every saying. - For example, the saying and conversion for digit string "3322251": > Given a positive integer n, return the nth term of the count-and-say sequence. - Example 1: > Input: n = 1 > Output: "1" > Explanation: This is the base case. - Example 2: > Input: n = 4 > Output: "1211" > Explanation: >> countAndSay(1) = "1" >> countAndSay(2) = say "1" = one 1 = "11" >> countAndSay(3) = say "11" = two 1's = "21" >> countAndSay(4) = say "21" = one 2 + one 1 = "12" + "11" = "1211" - Constraints: > 1 <= n <= 30 ## Solution - To do this recursive function, add another function ```convert``` to change the string value. - Inside the code, when confronted with 1 character, see whether it is the sam one from the last character. - If the same, kep counting. - Otherwise, add the last element into the string answer and its # of appearance. ```cpp= string convert(string ans) { string a; int ind= 0; for (int i= 1; i< ans.length(); i++) { if (ans[i]!= ans[ind]) { a+= to_string(i- ind)+ ans[ind]; ind= i; } } a+= to_string(ans.size()- ind)+ ans[ind]; return a; } ``` - When calling this function, remember to substract the ```n``` to satisfy the condition. ```cpp= string ans= "11"; while (--n!= 1) { ans= convert(ans); } return ans; ```