算法提高之LeetCode刷题LeetCode Python算法

682. Baseball Game

2018-07-06  本文已影响0人  fred_33c7

原题:https://leetcode.com/problems/baseball-game/description/
大意:这道题初一看没看懂意思,其实很简单

  • Integer (one round's score): Directly represents the number of points you get in this round.
  • "+" (one round's score): Represents that the points you get in this round are
    the sum of the last two valid round's points.
  • "D" (one round's score): Represents that the points you get in this round are the doubled data of the last valid round's points.
  • "C" (an operation, which isn't a round's score): Represents the last valid round's points you get were invalid and should be removed.

翻译成中文就是:

  • 数字(得分轮):本轮的得分为该数字
  • "+" (得分轮): 本轮的得分为前两个有效数字之和
  • "D"(得分轮): 本轮的得分为前一个有效数字的双倍
  • "C" (操作轮):去掉上一个有效数字

这一看前一个上一个的,自然而然想到了栈操作。但是python是没有现成的栈对象可以使用的,用list将就一下也能用

class Solution:
    def calPoints(self, ops):
        """
        :type ops: List[str]
        :rtype: int
        """
        stack = []
        for string in ops:
            if string == 'C':
                stack.pop()
            elif string == 'D':
                if stack:
                    stack.append(stack[-1] * 2)
            elif string == '+':
                if len(stack) >= 2:
                    stack.append(stack[-1] + stack[-2])
            else:
                stack.append(int(string))

        return sum(stack)

a = Solution()
print (a.calPoints(["5","2","C","D","+"]))

知识点:

我们可以在python中人为新建一个类,模拟栈操作,具体请看我的另一篇
Python中的栈

上一篇下一篇

猜你喜欢

热点阅读