Go語言LeetCode題解682棒球比賽
題目描述
你現(xiàn)在是一場(chǎng)采用特殊賽制棒球比賽的記錄員。這場(chǎng)比賽由若干回合組成,過去幾回合的得分可能會(huì)影響以后幾回合的得分。
比賽開始時(shí),記錄是空白的。你會(huì)得到一個(gè)記錄操作的字符串列表 ops,其中 ops[i] 是你需要記錄的第 i 項(xiàng)操作,ops 遵循下述規(guī)則:
- 整數(shù) x - 表示本回合新獲得分?jǐn)?shù) x
- "+" - 表示本回合新獲得的得分是前兩次得分的總和。題目數(shù)據(jù)保證記錄此操作時(shí)前面總是存在兩個(gè)有效的分?jǐn)?shù)。
- "D" - 表示本回合新獲得的得分是前一次得分的兩倍。題目數(shù)據(jù)保證記錄此操作時(shí)前面總是存在一個(gè)有效的分?jǐn)?shù)。
- "C" - 表示前一次得分無效,將其從記錄中移除。題目數(shù)據(jù)保證記錄此操作時(shí)前面總是存在一個(gè)有效的分?jǐn)?shù)。 請(qǐng)你返回記錄中所有得分的總和。
示例 1:
輸入:ops = ["5","2","C","D","+"] 輸出:30 解釋: "5" - 記錄加 5 ,記錄現(xiàn)在是 [5] "2" - 記錄加 2 ,記錄現(xiàn)在是 [5, 2] "C" - 使前一次得分的記錄無效并將其移除,記錄現(xiàn)在是 [5]. "D" - 記錄加 2 * 5 = 10 ,記錄現(xiàn)在是 [5, 10]. "+" - 記錄加 5 + 10 = 15 ,記錄現(xiàn)在是 [5, 10, 15]. 所有得分的總和 5 + 10 + 15 = 30
示例 2:
輸入:ops = ["5","-2","4","C","D","9","+","+"] 輸出:27 解釋: "5" - 記錄加 5 ,記錄現(xiàn)在是 [5] "-2" - 記錄加 -2 ,記錄現(xiàn)在是 [5, -2] "4" - 記錄加 4 ,記錄現(xiàn)在是 [5, -2, 4] "C" - 使前一次得分的記錄無效并將其移除,記錄現(xiàn)在是 [5, -2] "D" - 記錄加 2 * -2 = -4 ,記錄現(xiàn)在是 [5, -2, -4] "9" - 記錄加 9 ,記錄現(xiàn)在是 [5, -2, -4, 9] "+" - 記錄加 -4 + 9 = 5 ,記錄現(xiàn)在是 [5, -2, -4, 9, 5] "+" - 記錄加 9 + 5 = 14 ,記錄現(xiàn)在是 [5, -2, -4, 9, 5, 14] 所有得分的總和 5 + -2 + -4 + 9 + 5 + 14 = 27
示例 3:
輸入:ops = ["1"] 輸出:1
提示:
- 1 <= ops.length <= 1000
- ops[i] 為 "C"、"D"、"+",或者一個(gè)表示整數(shù)的字符串。整數(shù)范圍是 [-3 * 10^4, 3 * 10^4]
- 對(duì)于 "+" 操作,題目數(shù)據(jù)保證記錄此操作時(shí)前面總是存在兩個(gè)有效的分?jǐn)?shù)
- 對(duì)于 "C" 和 "D" 操作,題目數(shù)據(jù)保證記錄此操作時(shí)前面總是存在一個(gè)有效的分?jǐn)?shù)
思路分析
采用棧的方法,初始化一個(gè)空棧stack_i,每次從字符串中拿出一個(gè)字符,第一個(gè)字符都為數(shù)字,將當(dāng)前字符壓入棧底
若字符中取到C的話,表示將當(dāng)前棧頂?shù)脑厝〕?,若字符為D的話,表示將當(dāng)前棧頂元素的值乘以2倍,得出新的值不需要
替換棧頂?shù)闹?,因?yàn)槊恳徊讲僮鞫际仟?dú)立的,都是生成一個(gè)獨(dú)立的值,所以需要將生成的值放入棧頂,如取出的字符為+,則表示將
當(dāng)前棧頂?shù)闹岛蜅m斚旅娴哪莻€(gè)值相加生成一個(gè)新的值,新的值也是獨(dú)立操作得出來的,所以需要壓入棧頂,最后將棧中的值每個(gè)元素
相加即得到最后的答案
AC 代碼
class Solution: def calPoints(self, ops: List[str]) -> int: stack_i = [] for i in ops: if i == 'C': stack_i.pop() elif i == 'D': stack_i.append(int(stack_i[-1])*2) elif i == '+': stack_i.append(int(stack_i[-1])+ int(stack_i[-2])) else: stack_i.append(int(i)) return(sum(stack_i))
以上就是Go語言LeetCode題解682棒球比賽的詳細(xì)內(nèi)容,更多關(guān)于Go語言題解棒球比賽的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go語言中數(shù)據(jù)接口set集合的實(shí)現(xiàn)
set集合是一種常見的數(shù)據(jù)結(jié)構(gòu),它代表了一個(gè)唯一元素的集合,本文主要介紹了set的基本特性,包括唯一性、無序性、可變性和集合運(yùn)算,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10重學(xué)Go語言之如何開發(fā)RPC應(yīng)用
這篇文章主要為大家詳細(xì)介紹了在Go語言中如何構(gòu)建RPC應(yīng)用,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09GoFrame代碼優(yōu)化gconv類型轉(zhuǎn)換避免重復(fù)定義map
這篇文章主要為大家介紹了GoFrame代碼優(yōu)化gconv類型轉(zhuǎn)換避免重復(fù)定義map示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Windows10系統(tǒng)下安裝Go環(huán)境詳細(xì)步驟
Go語言是谷歌推出的一款全新的編程語言,可以在不損失應(yīng)用程序性能的情況下極大的降低代碼的復(fù)雜性,這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下安裝Go環(huán)境的詳細(xì)步驟,需要的朋友可以參考下2023-11-11golang簡(jiǎn)單獲取上傳文件大小的實(shí)現(xiàn)代碼
這篇文章主要介紹了golang簡(jiǎn)單獲取上傳文件大小的方法,涉及Go語言文件傳輸及文件屬性操作的相關(guān)技巧,需要的朋友可以參考下2016-07-07