Python中的Count and Say


這裡我們將瞭解Count and Say序列。這是一個序列,其部分項如下所示:

  • 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 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

更新於: 2020年4月28日

1K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.