Skip to content

Latest commit

 

History

History
55 lines (49 loc) · 1.2 KB

38.md

File metadata and controls

55 lines (49 loc) · 1.2 KB

题目地址

https://leetcode-cn.com/problems/count-and-say/

解答1

def countAndSay(n):
    """
        报数

        1.     1
        2.     11(表明1.有一个1)
        3.     21(表明2.有两个1)
        4.     1211(表明3.有一个2一个1)
        5.     111221(表明4.有一个1一个2两个1)
    """
    res = "1"
    if n <= 1:
        return res

    for i in range(1, n):
        ans = ""
        tuple_list = []
        for r in res:
            if tuple_list:
                if tuple_list[-1][0] == r:
                    tuple_list[-1][1] += 1
                else:
                    tuple_list.append([r, 1])
            else:
                tuple_list.append([r, 1])

        for t in tuple_list:
            ans += str(t[1]) + t[0]
        res = ans
    return res

解答2

def countAndSay(n):
    """
        报数

        1.     1
        2.     11(表明1.有一个1)
        3.     21(表明2.有两个1)
        4.     1211(表明3.有一个2一个1)
        5.     111221(表明4.有一个1一个2两个1)
    """
    import re
    s = '1'
    for _ in range(n - 1):
        s = re.sub(r'(.)\1*', lambda m: str(len(m.group(0))) + m.group(1), s)
    return s