1. 程式人生 > 其它 >【python】試題38.外觀數列

【python】試題38.外觀數列

技術標籤:LeetCodepython字串

一、問題

給定一個正整數 n ,輸出外觀數列的第 n 項。
「外觀數列」是一個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。
你可以將其視作是由遞迴公式定義的數字字串序列

  • countAndSay(1) = “1”
  • countAndSay(n) 是對 countAndSay(n-1) 的描述,然後轉換成另一個數字字串。
    在這裡插入圖片描述

二、思路

由於要採用遞迴,要對每一層返回進行思考,腦容量不足以完成任務,索性先將描述寫出函式,再將函式巢狀到遞迴中去

class Solution:
    def countAndSay(self, n: int
) -> str: if n==1: return '1' return self.describe(self.countAndSay(n-1)) def describe(self,input):# 定義描述函式 i=0 des='' # 初始化輸出描述 while i <len(input): count = 0 # 每個字元的計數器 j=i # 從第i位開始進行比較 while j<len(
input) and input[j]==input[i]:# 首先保證j在字元索引範圍內,再進行比較 count+=1 #計數器+1 j+=1 # 比較位+1 des = des + str(count) + input[i] #將每次統計的描述字元組合起來 i=j # 從新字元開始進行下一次的比較 return des # 返回描述字元,即countAndSay(n+1)