题目:
实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: "3+2*2"输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/basic-calculator-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
答案:
时间:
10min
class Solution:def calculate(self, s: str) -> int:stack=[]num=0sign= "+"record={"+","-","*","/"}for i in range(len(s)):word=s[i]if word.isdigit():num=num*10+int(word)if word in record or i==len(s)-1:if sign=="+":stack.append(num)elif sign=="-":stack.append(-num)elif sign=="*":stack.append(stack.pop()*num)else:stack.append(int(stack.pop()/num))num=0sign=wordreturn reduce(lambda x,y:x+y,stack)
要点:
1. 就是栈和数字的更新
注意“14-3/2”这个例子,更新除法的时候是 -3//2 ,所以要写 int(stack.pop()/num) 而不是直接 //
