题目描述
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。
示例
示例 1:
输入:s = “3+2*2”
输出:7
示例 2:
输入:s = “ 3/2 “
输出:1
示例 3:
输入:s = “ 3+5 / 2 “
输出:5
提示:
1 <= s.length <= 3 * 105
s 由整数和算符 (‘+’, ‘-‘, ‘*’, ‘/‘) 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
题目数据保证答案是一个 32-bit 整数
解题思路:利用双栈解法,一个用于存储操作数,一个用于存储运算符
遍历字符串,当遇到空格则跳过,遇到操作数则把当前操作数暂时存起来,继续匹配后面的,如果后面的不是操作数了,就把这个数压入操作数栈中,接下来遍历的就是运算符了,如果当前运算符的优先级小于或等于运算符栈栈顶的优先级,则取出操作数栈栈顶(弹出栈并赋值变量)的两个操作数并与运算符栈栈顶的运算符计算,把计算结果压入操作数栈中
压入操作符到运算符栈中
返回操作数栈顶元素(有一个小技巧,在字符串后加一个特殊字符,用于表示表示最低的运算符)
1 | //计算优先级 |