227. Basic Calculator II
逻辑
Implement a basic calculator to evaluate a simple expression string.
The expression string contains onlynon-negativeintegers,+,-,*,/operators and empty spaces. The integer division should truncate toward zero.
Example 1:
Input:
"3+2*2"
Output:
7Example 2:
Input:
" 3/2 "
Output:
1Example 3:
Input:
" 3+5 / 2 "
Output:
5分析
计算机的题目好像都是op在前,数字带着op走,或者入栈,或者入expression带着走。
注意这里2个陷阱:最后一个数也要加入栈,所以ii == n-1 不是else
/的时候 3/2和-3/2要额外处理。用ceil和floor
--------2025 update-----
总体思路就是遍历时候,遇到时op候,开始计算前一个op操作,因为说明前一个op所有条件到位,为此需要track前一个op的所有操作数, prevnum +op+num
栈的话就是记录prev_num
不用栈的话,多个res不断更新。记得最后结果加入res。
不用栈的做法:
当前若是OP,则可以开始处理之前的OP
对于+- op前的全部加入res, OP后的设为新的prev_num
对于*/ 更新当前prev_num即可。prev_num *=num
栈的做法
遇到数字只负责记录
遇到op时开始处理前面的op,因为说明前面op所需要的所有元素都齐全,第一个数字来自stack,第二个数字来自cur_num。
OP +-只负责压数字, OP */弹栈处理后再压数字。
栈做法的debug代码,帮助理解
Last updated
Was this helpful?