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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.