0227. 基本计算器 II #
- 标签:栈、字符串
- 难度:中等
题目大意 #
给定一个字符串表达式 s
,表达式中所有整数为非负整数,运算符只有 +
、-
、*
、/
,没有括号。
要求:实现一个基本计算器来计算并返回它的值。
解题思路 #
计算表达式中,乘除运算优先于加减运算。我们可以先进行乘除运算,再将进行乘除运算后的整数值放入原表达式中相应位置,再依次计算加减。
可以考虑使用一个栈来保存进行乘除运算后的整数值。正整数直接压入栈中,负整数,则将对应整数取负号,再压入栈中。这样最终计算结果就是栈中所有元素的和。
具体做法:
- 遍历字符串
s
,使用变量op
来标记数字之前的运算符,默认为+
。 - 如果遇到数字,继续向后遍历,将数字进行累积,得到完整的整数 num。判断当前 op 的符号。
- 如果
op
为+
,则将num
压入栈中。 - 如果
op
为-
,则将-num
压入栈中。 - 如果
op
为*
,则将栈顶元素top
取出,计算top * num
,并将计算结果压入栈中。 - 如果
op
为/
,则将栈顶元素top
取出,计算int(top / num)
,并将计算结果压入栈中。
- 如果
- 如果遇到
+
、-
、*
、/
操作符,则更新op
。 - 最后将栈中整数进行累加,并返回结果。
代码 #
|
|