Skip to content

Latest commit

 

History

History

38

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

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

Companies:
Bloomberg, Microsoft, Facebook, Adobe, Goldman Sachs

Related Topics:
String

Similar Questions:

Solution 1. Recursive

// OJ: https://leetcode.com/problems/count-and-say/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(N)
class Solution {
public:
    string countAndSay(int n) {
        if (n == 1) return "1";
        string s = countAndSay(n - 1), ans;
        for (int i = 0, N = s.size(); i < N; ++i) {
            char d = s[i];
            int cnt = 1;
            while (i + 1 < N && s[i + 1] == s[i]) ++i, ++cnt;
            ans += to_string(cnt) + d;
        }
        return ans;
    }
};

Solution 2. Iterative

// OJ: https://leetcode.com/problems/count-and-say/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(N)
class Solution {
public:
    string countAndSay(int n) {
        string ans = "1";
        while (--n) {
            string next;
            int i = 0;
            while (i < ans.size()) {
                char c = ans[i];
                int cnt = 0;
                while (i < ans.size() && ans[i] == c) ++cnt, ++i;
                next += to_string(cnt) + c;
            }
            ans = next;
        }
        return ans;
    }
};