Solution for Count and Say

Count and Say

题目定义的比较难懂,查看下列序列的规律:

 1.     1
 2.     11
 3.     21
 4.     1211
 5.     111221 
 6.     312211
 7.     13112221
 8.     1113213211
 9.     31131211131221
10.     13211311123113112211

上一个序列n中所有元素重复次数count拼上这个元素ele

例如

  • 21的下一个是:“1个2,1个1”,即:1211
  • 1211的下一个是:“1个1,1个2,2个1”,即:111221
  • 111221的下一个是:”3个1,2个2,1个1”,即:312211

根据以上规律,可以得到一个转换函数say(),实现如下:

def say(self, str2Say):
    lastChar = str2Say[0]
    returnStr = ""
    count = 1
    for char in str2Say[1:]:
        if lastChar == char:
            count += 1
        else:
            returnStr += str(count)
            returnStr += lastChar
            count = 1
        lastChar = char
    return returnStr + str(count) + lastChar

调用多次这个转换函数,即可返回题目要求的结果:

def countAndSay(self, n):
    """
    :type n: int
    :rtype: str
    """
    str = "1"
    i = 0
    while i < n - 1: 
        str = self.say(str)
        i += 1
    
    return str