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:

Input: "1 + 1"
Output: 2

Example 2:

Input: " 2-1 + 2 "
Output: 3

Example 3:

Input: "(1+(4+5+2)-3)+(6+8)"
Output: 23
Note:

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