程序在Python的Look and Say Sequence中查找第n个术语

假设我们有一个数字n,我们必须按“查找并说出”顺序生成第n个项。这是一个序列,其几个术语如下-

  • 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],则

    • 除此以外:

    • curr:= s [j],count:= 1并将j增加1

    • 将计数和j增加1

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

    • curr =空字符串

    • 计数:= 0

    • j:= 0

    • temp:=空字符串

    • curr =空字符串并计数:= 0

    • 当j <s的长度时

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

    • 返回s

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

    示例

    class Solution(object):
       def solve(self, n):
          s = "1"
          if n == 1:
             return s
          for i in range(2,n+1):
             j = 0
             temp = ""
             curr = ""
             count = 0
             while j <len(s):
                if curr =="":
                   curr=s[j]
                   count=1
                   j+=1
                elif curr == s[j]:
                   count+=1
                   j+=1
                else:
                   temp+= str(count) + curr
                   curr=""
                   count = 0
                   temp+=str(count) + curr
                   s=temp
             return s
    ob = Solution()n = 5
    print(ob.solve(n))

    输入值

    5

    输出结果

    "111221"
    猜你喜欢