LeetCode-227. 基本计算器 II Python3版本

  • Post author:
  • Post category:python


227. 基本计算器 II


实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,

+



-



*



/

四种运算符和空格


。 整数除法仅保留整数部分。


示例 1:

输入: "3+2*2"
输出: 7


示例 2:

输入: " 3/2 "
输出: 1


示例 3:

输入: " 3+5 / 2 "
输出: 5


说明:

  • 你可以假设所给定的表达式都是有效的。


  • 不要

    使用内置的库函数

    eval

解题思路:注意整数除法操作Python3和Python2的不同!这里直接贴一个我第一次做这个题的笔记吧。

关键在于怎么处理乘法和除法,如果是乘法或者除法,我们需要用前面的数和当前的数做运算。
因此此处可以用栈来记录前面的数字,用一个符号变量记录前一个符号,当遍历到一个新数字时,判断一下前面的符号是什么,
如果是乘除,就和前面的数字运算,如果是+,就向栈中push这个数字,如果是-,就push这个数字的负数。
遍历到结尾,把最后一个数字入栈,此时栈中存放的都是要进行加法运算的数字。

Python3代码如下:

class Solution:
    def calculate(self, s: str) -> int:
        operate = '+'
        s = s + '+'
        start = 0
        stack = []
        for i in range(len(s)):
            if s[i].isdigit() or s[i] == ' ':
                continue
            num = int(s[start:i].replace(' ',''))
            if operate == '+':
                stack.append(num)
            elif operate == '-':
                stack.append(-num)
            elif operate == '*':
                stack.append(stack.pop()*num)
            else:
                stack.append(int(stack.pop()/num))
            start = i + 1
            operate = s[i]
        return sum(stack)



版权声明:本文为qq_36309480原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。