【python】試題38.外觀數列
阿新 • • 發佈:2021-01-23
一、問題
給定一個正整數 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)