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 版权协议,转载请附上原文出处链接和本声明。