给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, – ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。

示例 1:

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

示例 2:

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

示例 3:

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

说明:

  • 你可以假设所给定的表达式都是有效的。
  • 请不要使用内置的库函数 eval。

Python 解答:
1.堆栈

class Solution:
    def calculate(self, s: str) -> int:
        stack = []
        slist = []
        i = 0 
        while i < len(s):
            if s[i] == ' ':
                i += 1
            elif s[i].isdigit():
                j = i 
                while j < len(s) and s[j].isdigit():
                    j += 1
                slist.append(s[i:j])
                i = j
            else:
                slist.append(s[i])
                i += 1
        while slist:
            c = slist.pop(0)
            if c.isdigit():
                stack.append(int(c))
            elif c == '+' or c == '-':
                stack.append(c)
            elif c == '*' or c == '/':
                left = stack.pop()
                right = slist.pop(0)
                if c == '*':
                    stack.append(int(left)*int(right))
                else:
                    stack.append(int(left)//int(right))
        result = 0
        while stack:
            c = stack.pop(0)
            if type(c) == int:
                result += c
            elif c == '+' or c == '-':
                right = stack.pop(0)
                if c == '+':
                    result += right
                else:
                    result -= right
        return result
最后修改日期: 2021年5月14日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。