你現在是棒球比賽記錄員。
給定乙個字串列表,每個字串可以是以下四種型別之一:
1.整數(一輪的得分):直接表示您在本輪中獲得的積分數。
2. 「+」(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分的總和。
3. 「d」(一輪的得分):表示本輪獲得的得分是前一輪有效 回合得分的兩倍。
4. 「c」(乙個操作,這不是乙個回合的分數):表示您獲得的最後乙個有效 回合的分數是無效的,應該被移除。
每一輪的操作都是永久性的,可能會對前一輪和後一輪產生影響。
你需要返回你在所有回合中得分的總和。
示例 1:
輸入: [「5」,「2」,「c」,「d」,"+"]
輸出: 30
解釋:第1輪:你可以得到5分。總和是:5。
第2輪:你可以得到2分。總和是:7。
操作1:第2輪的資料無效。總和是:5。
第3輪:你可以得到10分(第2輪的資料已被刪除)。總數是:15。
第4輪:你可以得到5 + 10 = 15分。總數是:30。
因為總是會更新新一輪的值所以考慮使用棧來解決。
1.分析 「+」 這時需要拿出上一輪與上上一輪的值進行相加。首先執行pop()操作拿到上一輪的分數(這裡為了方便理解變數名取為second),
再執行peek()操作取得上上一輪的值。最後放入上一輪與這一輪的值。
注:pop()操作會刪除棧頂元素而peek()操作不會。
2.分析「d」操作,這個直接peek()取得上一輪的值×2再壓入棧就可以了。
3.分許「c」操作,這個也是直接pop()刪除棧頂就可以了。
4.整數操作就直接轉換為數字壓入棧即可。
5.最後把每一輪的分分數相加即可。
棧還是在解決某些問題比如要更新最近的值等等問題還是比較簡便的。
class solution else if(op.equals("c"))else if(op.equals("d"))else
}int res = 0;
for(integer score : stack)
return res;
}}
LeetCode 棒球比賽
你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的積分數。2.一輪的得分 表示本輪獲得的得分是前兩輪有效 回合得分的總和。3.d 一輪的得分 表示本輪獲得的得分是前一輪有效 回合得分的兩倍。4.c 乙個操作,這不是乙個回合的分數 ...
LeetCode 棒球比賽 682
你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的積分數。2.一輪的得分 表示本輪獲得的得分是前兩輪有效回合得分的總和。3.d 一輪的得分 表示本輪獲得的得分是前一輪有效回合得分的兩倍。4.c 乙個操作,這不是乙個回合的分數 表示...
LeetCode 682 棒球比賽
你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的積分數。2.一輪的得分 表示本輪獲得的得分是前兩輪有效回合得分的總和。3.d 一輪的得分 表示本輪獲得的得分是前一輪有效回合得分的兩倍。4.c 乙個操作,這不是乙個回合的分數 表示...