224. Basic Calculator
problem description
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
Example 1:
Example 2:
Example 3:
You may assume that the given expression is always valid. Do not use the eval built-in library function.
algorithm thought
基本计算器,只有加减法,之前数据结构学习栈的时候,提到了可以直接用两个栈解决。这学期学习编译原理课,也学到了栈式计算机,也是提供简单的栈指令可以实现计算器。
这里状态不多,不需要使用switch语句,构建DFA。直接使用if else即可。这里一共就4种类型的符号。操作符,数字,括号,括回。
这里使用一个sign符号代表当前的操作符。
碰到数字,将当前保存的数字乘10,加上这次数字 碰到操作符,因为这里没有优先级,可以直接计算上一个操作的结果,然后将sign改为这次操作对应操作符 碰到括号,将当前结果和操作符保存。括号就相当于一次递归调用函数,括号里面就是一次计算,需要保存之前的结果。 碰到括回,弹出上次保存的结果,将其与括号里的相加。
code
algorithm analysis
只需要一次遍历字符串,时间复杂度O(n),使用栈保存结果,最坏情况下空间复杂度O(n)
Last updated