Python 中查找观测数列第 n 项的程序


假设我们有一个数字 n,我们需要生成“观测数列”中的第 n 项。这是一个序列,其一些项如下所示:

  • 1
  • 11
  • 21
  • 1211
  • 111221

字符串将按如下方式读取

  • 1(一)
  • 11(一个 1)所以读取前面的 1,并说“一个 1”
  • 21(两个 1)所以读取前面的 11,并说“两个 1”
  • 1211(一个 2 一个 1)所以读取前面的 21,并说“一个 2 一个 1”
  • 111221(一个 1 一个 2 两个 1)所以读取前面的 1211,并说“一个 1 一个 2 两个 1”

假设我们有一个数字 n,1 <= n < = 30,那么我们需要生成第 n 项。为了解决这个问题,我们将遵循以下方法:

  • 设置 s := “1”
  • 如果 n = 1,则返回 s
  • 对于 i := 2 到 n + 1
    • j := 0
    • temp := 空字符串
    • curr = 空字符串,count := 0
    • 当 j < s 的长度时,执行以下操作
      • 如果 curr 为空字符串,则
        • curr := s[j],count := 1,并将 j 增加 1
      • 否则如果 curr 为 s[j],则
        • 将 count 和 j 增加 1
      • 否则
        • temp := temp + count 作为字符串 + curr
        • curr = 空字符串
        • count := 0
    • temp := temp + count 作为字符串 + 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"

更新于: 2020-11-19

565 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告