LeetCode38. Count and Say

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.

<Idea> The question is more annoying, only one step reading. Cur_val is the number to be read (one bit), count is the number of this number, part is the intermediate variable, and the count and cur_val (several) of this loop are saved.

class Solution(object):
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        """
        num = '1'
        
        while n>1:
            cur_val = num[0]
            count = 0
            part = ''
            
            for j in num:
                if cur_val == j:
                    count += 1
                else:
                    part += str(count)+cur_val
                    cur_val = j
                    count = 1
            
            part += str(count) + cur_val
            num = part
            n -= 1
        return num