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)