LeetCode 682.野球の試合(python)

1858 ワード

タイトルリンク
あなたは今野球の記録員です.文字列のリストを指定します.各文字列は、次の4つのタイプのいずれかです.1.整数(1ラウンドの得点):本ラウンドで得たポイント数を直接表します.2.「+」(1ラウンドの得点):本ラウンドで獲得した得点が前の2ラウンドの有効ラウンドの得点の合計であることを示す.3.「D」(1ラウンドの得点):本ラウンドで獲得した得点が前ラウンドの有効ラウンドの得点の2倍であることを示す.4.「C」(1ラウンドのスコアではない操作):最後の有効ラウンドのスコアが無効であることを示し、削除されるべきである.
各ラウンドの操作は永久的であり、前のラウンドと後のラウンドに影響を与える可能性がある.すべてのラウンドで得点した合計を返す必要があります.
例1:
入力:["5","2","C","D","+"]出力:30解釈:第1ラウンド:5点を得ることができます.合計は:5です.第2ラウンド:2点を得ることができます.合計は:7です.操作1:第2ラウンドのデータが無効です.合計は:5です.第3ラウンド:10点を得ることができます(第2ラウンドのデータは削除されました).合計は:15です.第4ラウンド:5+10=15点を得ることができます.合計は:30です.例2:
入力:["5","-2","4","C","D","9","+","+"]出力:27解釈:第1ラウンド:5点を得ることができます.合計は:5です.第2ラウンド:あなたは-2点を得ることができます.合計は:3です.第3ラウンド:4点を得ることができます.合計は:7です.操作1:第3ラウンドのデータが無効です.合計は:3です.第4ラウンド:-4点を得ることができます(第3ラウンドのデータは削除されました).合計は-1です.第5ラウンド:9点を得ることができます.合計は:8です.第6ラウンド:-4+9=5点を得ることができます.総数は13です.第7ラウンド:9+5=14点を得ることができます.総数は27です.注意:
入力リストのサイズは1~1000です.リストの各整数は-3000~30000です.
問題を解く構想:スタックで問題を解決して、res[]はすべてのステップの現在の得点を保存するため、すべてのステップがすべて総得点を計算する必要がなくて、最後にresに対して和を求めることができます
class Solution:
    def calPoints(self, ops: List[str]) -> int:
        res=[]#        
        sum=0 #        
        res.append(ops[0])
        sum=sum+int(res[-1])
        for i in range(1,len(ops)):
            if ops[i]=='+':
                res.append(int(res[-1])+int(res[-2]))#         
                sum=sum+int(res[-1])
            elif ops[i]=='D':
                res.append(int(res[-1])*2)#          
                sum=sum+int(res[-1])
            elif ops[i]=='C':
                sum=sum-int(res[-1])#              
                res.pop()
            else :
                res.append(ops[i])#      
                sum=sum+int(res[-1])
        return sum