外观数列Python解法
給定一個正整數 n ,輸出外觀數列的第 n 項。
「外觀數列」是一個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。
你可以將其視作是由遞歸公式定義的數字字符串序列:
countAndSay(1) = "1"
countAndSay(n) 是對 countAndSay(n-1) 的描述,然后轉換成另一個數字字符串。
前五項如下:
1. ? ? 1
2. ? ? 11
3. ? ? 21
4. ? ? 1211
5. ? ? 111221
第一項是數字 1?
描述前一項,這個數是 1 即 “ 一 個 1 ”,記作 "11"
描述前一項,這個數是 11 即 “ 二 個 1 ” ,記作 "21"
描述前一項,這個數是 21 即 “ 一 個 2 + 一 個 1 ” ,記作 "1211"
描述前一項,這個數是 1211 即 “ 一 個 1 + 一 個 2 + 二 個 1 ” ,記作 "111221"
要 描述 一個數字字符串,首先要將字符串分割為 最小 數量的組,每個組都由連續的最多 相同字符 組成。然后對于每個組,先描述字符的數量,然后描述字符,形成一個描述組。要將描述轉換為數字字符串,先將每組中的字符數量用數字替換,再將所有描述組連接起來。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/count-and-say
?
例:
輸入:n = 4
輸出:"1211"
解釋:
countAndSay(1) = "1"
countAndSay(2) = 讀 "1" = 一 個 1 = "11"
countAndSay(3) = 讀 "11" = 二 個 1 = "21"
countAndSay(4) = 讀 "21" = 一 個 2 + 一 個 1 = "12" + "11" = "1211"
解析:
題目的意思是給出的數字是需要解釋的輪數,n=4說明要解釋到第四層。對1進行逐層遍歷,將遍歷的結果變為第二層的遍歷輸入。將字符串從前向后遍歷,相同計數,不同就“入棧”,全部遍歷完成后輸出結果即可。
class Solution(object):def countAndSay(self, n):""":type n: int:rtype: str"""res = '1$' # 后面添加一個符號方便比較最后一個字符for i in range(1, n):t, sum = '', 1for j in range(1, len(res)):if res[j] == res[j - 1]: # 最后一個數字字符和$一定不同,防止報錯sum += 1else:t += (str(sum) + res[j - 1]) # ”入棧“sum = 1t += '$'res = treturn res[:-1] # 最后一個$不輸出總結
以上是生活随笔為你收集整理的外观数列Python解法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易金融是哪个借款平台 易金融是哪一家借款
- 下一篇: 增值税专用发票冲红流程及操作方法 增值税