用Python计算并说

在这里,我们将看到“计数并说”序列。这是一个序列,其几个术语如下-

  • 1

  • 11

  • 21

  • 1211

  • 111221

该字符串将被读取为

  • 1(一)

  • 11(一个1)因此,请阅读前一个1,然后说“一个1”

  • 21(两个1)所以请阅读前面的11,然后说“两个1”

  • 1211(一个2 1 1)所以请阅读前面的21,然后说“一个2 1 1”

  • 111221(一个1一2 2 1)所以请阅读前面的1211,然后说“一个1一2 2 2 1”

假设我们有一个数字n,1 <= n <= 30,那么我们必须生成第n个项。

为了解决这个问题,我们将遵循这种方法-

  • 设置s:=“ 1”

  • 如果n = 1,则返回s

  • 对于我:= 2到n + 1

    • 如果curr为“”,则curr:= s [j],count:= 1并将j加1

    • 否则,如果curr是s [j],则将count和j加1

    • 否则temp:= temp +计数为字符串+ curr,curr =“”,count:= 0

    • j:= 0,temp:=“”,curr =“”并计数:= 0

    • 当j <s的长度时

    • temp:= temp +算作字符串+ curr

    • 返回s

    让我们看下面的实现以更好地理解-

    示例

    class Solution(object):
       def countAndSay(self, n):
          """
          :type n: int
          :rtype: str
          """
          s = "1"
          if n == 1:
             return s
          for i in range(2,n+1):
             j = 0
             temp = ""
             curr = ""
             count = 0
             while j<len(s):
                #print(curr,count)
                if curr =="":
                   #print(curr)
                   curr=s[j]
                   count=1
                   j+=1
                elif curr == s[j]:
                   #print(curr)
                   count+=1
                   j+=1
                else:
                   #print(count,curr)
                   temp+= str(count) + curr
                   curr=""
                   count = 0
                   #print(temp)
             temp+=str(count) + curr
             s=temp
          return s
    ob1 = Solution()print(ob1.countAndSay(6))

    输入值

    print(ob1.countAndSay(6))

    输出结果

    312211