less than 1 minute read

<-M 38> Count and Say

// Method 1
class Solution {
public:

    string countans(string curr, int on, int n) {
        if (on == n)
            return curr;
        int l = curr.length();
        int count = 1;
        string retstr = "";
        for (int i = 1; i <= l; i++) {
            while (i < l && curr[i] == curr[i - 1]) {
                count++;
                i++;
            }
            retstr += 48 + count;
            retstr += curr[i - 1];
            count = 1;
        }
        return countans(retstr, on + 1, n);
    }

    string countAndSay(int n) {
        return countans ("1", 1, n);
    }
};

// Method 2
class Solution {
public:
    string countAndSay(int n) {
        if (n == 0)
            return "";
        else if(n == 1)
            return "1";
        else if (n == 2)
            return "11";
        string ans = "11";
        int counter = 0;

        while(n >= 3) {
            string temp;

            for(int i = 0; i != ans.size();) {
                char curr = ans[i];
				while (i < ans.size() && ans[i] == curr) {
					i++;
					counter++;
				}
				temp.append(to_string(counter) + curr);
				counter = 0;
			}
			ans = temp;
            n--;
        }
        return ans;
    }
};