"""
  报数
报数序列是一个整数序列，按照其中的整数的顺序进行报数，得到下一个数。其前五项如下：

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作  "one 1"  ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"）, 即 21。
21 被读作 "one 2",  "one 1" （"一个二" ,  "一个一") , 即 1211。

给定一个正整数 n（1 ≤ n ≤ 30），输出报数序列的第 n 项。

注意：整数顺序将表示为一个字符串。


示例 1:

输入: 1
输出: "1"
示例 2:

输入: 4
输出: "1211"

"""

# 71.25
class Solution(object):
    def countAndSay(self, n):
        """
        :type n: int
        :rtype: str
        输出可以分解为多个报数单元,每个单元由数字连续出现的次数和数字组成
        """
        if n == 1:
            return '1'
        if n == 2:
            return '11'
        if n == 3:
            return '21'
        num_list = '21'
        for i in range(n-3):
            j = 0
            new_num_list = ''
            while j < len(num_list):
                num = num_list[j]
                count = 1
                while j + count < len(num_list) and num_list[j + count] == num:
                    count += 1
                new_num_list = new_num_list + str(count) + str(num)
                j = j + count
            num_list = new_num_list
            print(i, num_list)
        return num_list


so = Solution()
print(so.countAndSay(5))






