首页 > 试题广场 >

表达式求值

[编程题]表达式求值
  • 热度指数:90370 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请写一个整数计算器,支持加减乘三种运算和括号。

数据范围:,保证计算结果始终在整型范围内

要求:空间复杂度: ,时间复杂度
示例1

输入

"1+2"

输出

3
示例2

输入

"(2*(3-4))*5"

输出

-10
示例3

输入

"3+2*3*4-1"

输出

26
头像 宫水三叶的刷题日记
发表于 2021-07-07 15:04:30
精华题解 【本题】双栈解法 对于「任何表达式」而言,我们都使用两个栈 nums 和 ops: nums : 存放所有的数字 ops :存放所有的数字以外的操作 然后从前往后做,对遍历到的字符做分情况讨论: 空格 : 跳过 ( : 直接加入 ops 中,等待与之匹配的 ) ) : 使用现有的 nums 和 展开全文
头像 牛客题解官
发表于 2022-04-22 12:21:16
精华题解 题目的主要信息: 写一个支持+ - *三种符号的运算器,其中优先级+ - 是一级,*更高一级 支持括号运算 举一反三: BM44. 有效括号序列 方法:栈 + 递归(推荐使用) 知识点:栈 栈是一种仅支持在表尾进行插入和删除操作的线性表,这一端被称为栈顶,另一端被称为栈底。元素入栈指的是把新元素 展开全文
头像 下一次什么时候可以修改昵称
发表于 2020-10-22 19:25:41
算法:栈 1.用栈保存各部分计算的和 2.遍历表达式,使用 sign 变量记录运算符,初始化是 '+';使用 number 变量记录字符串中的数字部分的数字值是多少 2.0 遇到空格时跳过 2.1 遇到数字时继续遍历求这个完整的数字的值,保存到 number 中 2.2 遇到左括号时递归求这个括号里 展开全文
头像 子夜降晴空
发表于 2021-03-23 18:06:33
class Solution { public: int solve(string s) { int res = 0; //用于返回当前字符串的计算结果 stack<int> sum; //用于求和 char sign = '+'; 展开全文
头像 嘴角那一抹微笑amh
发表于 2021-10-17 22:32:43
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # 返回表达式的值 # @param s string字符串 待计算的表达式 # @return int整型 # class Solution: def solve(self , s ): # 展开全文
头像 小张今天收到offer了么
发表于 2022-07-10 18:24:37
这道题做了好久,看到没有C语言题解咱就写一下,欢迎优化指正OvO- - 本解法采用逆波兰表达式求解,前半段是将中缀表达式变换成后缀表达试(逆波兰表达式) 关于逆波兰表达式大家可以百度知乎一下,算法入门里面也有逆波兰表达式的题,感觉用逆波兰算长表达式是真滴好使- -。 代码如下,大家应该都可以看懂,要 展开全文
头像 2ez4me
发表于 2022-03-23 21:48:16
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 返回表达式的值 # @param s string字符串 待计算的表达式 # @return int整型 # class Solution: def solve(self , s: str) -> 展开全文
头像 牛客516598323号
发表于 2020-10-02 13:17:27
逆波兰算法,后缀表达式。100.00%通过率;32ms运行时间;6520KB占用内存 # 逆波兰法 https://www.cnblogs.com/lulipro/p/7450886.html priority = {'+': 0, '-': 0, '*': 1} # # 代码中的类名、方法名、参数 展开全文
头像 LifelongCode
发表于 2021-01-09 19:08:07
中缀表达式转后缀表达式的方法:1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素【栈内 展开全文
头像 OfferCall!
发表于 2021-03-30 22:51:15
题目给出的算术表达式主要包括三部分:操作数、括号、运算符一般的算术表达式都是中缀表达式,不易于编程计算。所以我们可以利用逆波兰算法将算术表达式的中缀形式转为更易于计算的后缀形式。转换为后缀表达式的过程需要借助两个额外空间,栈S和数组列表L,其中栈用于存储左括号和运算符,数组列表用于存储后缀表达式。整 展开全文
头像 alex_coder
发表于 2022-08-31 18:03:26
一眼看过去很简单,实际写的时候发现很多坑。 1.第一步:先不管括号的问题 2.第二步:先不管乘法问题 3.第三步:实现加减运算 4.第四步:解决连续数字问题 class Solution:     def  展开全文
头像 文和906
发表于 2021-09-28 13:28:17
经典的中缀表达式求值。常用思路,将其转为后缀表达式,边转边求值。后缀表达式的特点,遇到运算符则将前两个数拿出来运算,便于计算机计算。这里简单描述一下算法过程:遍历字符串,当读到的是数字时,直接将其压入数字栈。当读到的是运算符时,若符号栈为空,则直接将其压入符号栈;若符号栈非空,则判断符号栈栈顶的运算 展开全文