Leetcode练习(Python):字符串类:第227题:基本计算器 II:实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

题目:
基本计算器 II:实现一个基本的计算器来计算一个简单的字符串表达式的值。  字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。

说明:

  • 你可以假设所给定的表达式都是有效的。
  • 请不要使用内置的库函数 eval
思路:
使用栈来实现,之前在做课设时候做过,因为不考虑括号和小数点的问题,比较简单。
程序:
class Solution:
    def calculate(self, s: str) -> int:
        if not s:
            return 0
        length = len(s)
        if length == 1:
            return int(s)
        myStack = []
        data = 0
        sign = '+'
        for index in range(len(s)):
            if s[index].isdigit():
                data = data * 10 + int(s[index])
            if s[index] in '+-*/' or index == length - 1:
                if sign == '+':
                    myStack.append(data)
                elif sign == '-':
                    myStack.append(-data)
                elif sign == '*':
                    myStack.append(myStack.pop() * data)
                else:
                    data_before = myStack.pop()
                    if data_before > 0:
                        myStack.append(data_before//data)
                    elif data_before < 0:
                        myStack.append(-(abs(data_before)//data))
                    else:
                        myStack.append(0)
                sign = s[index]
                data = 0
    return sum(myStack)
posted on 2020-05-08 16:42  桌子哥  阅读(1454)  评论(0编辑  收藏  举报