C++刷题: 逆波兰表达式(力扣150题)
题目如下(答案在最后, 如有更好的方法请在评论区回复)
逆波兰表达式根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
注意 两个整数之间的除法只保留整数部分。
可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
class Solution {
public:int evalRPN(vector<string>& tokens) {}
};
难点:
1, 字符串型转化为整数型;
2, 识别数字与运算符;
思路:
1, 利用栈存取数字;
2, 遇到数字入栈, 遇到运算符弹出两个栈顶;
3, 弹出两个栈顶, 运算后的数字入栈;
4, 最后返回栈顶, 栈顶就是运算结果.
class Solution {
public:int clac(int a,int b, string c){int result;if(c == "+"){result = a+b;}else if(c == "-"){result = a-b;}else if(c == "*"){result = a*b;}else if(c == "/"){result = a/b;}return result;}int evalRPN(vector<string>& tokens) {stack<int> Stk;int num1;int num2;for(int i = 0; i < tokens.size(); i++){if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/" ){num2 = Stk.top();Stk.pop();num1 = Stk.top();Stk.pop();Stk.push(clac(num1,num2,tokens[i]));}else{Stk.push(atoi(tokens[i].c_str()));}}return Stk.top();}
};
我的第一次错误思路:
1, 第一次遇到运算符, 弹出两个数字, 赋值到num1, num2, 运算后赋值给num2;
2, 第二次遇到运算符, 弹出一个数字, 赋值到num1, 与num2计算, 计算结果赋值到num2;
问题: 只能解决" 2, 1, 3, -, * "的情况, 运算符后面有数字则会计算错误;
关于字符串转化为数字:
1, 字符串转化为浮点数: atof函数
2, 将string对象转换为c中的字符串样式: c_str函数
C++刷题: 逆波兰表达式(力扣150题)相关推荐
- 征战蓝桥 —— 2013年第四届 —— C/C++A组第6题——逆波兰表达式
标题:逆波兰表达式 正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便. 例如:3 + 5 * (2 + 6) - 1 而且,常常需要用括号来改变运算次序. 相反,如果使用逆 ...
- 蓝桥c++2013真题:逆波兰表达式(代码填空题)
v1是对下值1 递归求逆波兰表达式 则v2应是对值2 递归求逆波兰表达式 所以应该找到值2开始的位置x+1+v1.n 答案: v2 = evaluate(x+1+v1.n);
- leetcode算法题--逆波兰表达式求值
题目链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/ 这个题目也是常见题目,很简单 int evalRPN(v ...
- 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...
- 程序员面试需要刷力扣算法题吗
这里写目录标题 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一些特征 1.2. 为什么要考查算法 1.3. 目前面试主要考查 3 类 1. 程序员面试需要刷力扣算法题吗 1.1. 算法题的一 ...
- (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)
目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...
- 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值
day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...
- 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)
根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...
- 力扣编程题-解法汇总
一.力扣链接: 题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 备注:以后每个工作日从前往后刷一道题,然后再加一道每日新题.每天两道题. 二.模版: 标题: 力扣解法汇总5-正则表达 ...
- 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...
最新文章
- DATEIF实例说明4
- 设计一个魔方(六面)的程序 【微软面试100题 第四十四题】
- 本次案例:对于sun 服务器的故障排查
- Maven搭建SpringMVC+Mybatis项目详解【转】
- 合泰单片机做电压表_启士 | 蓝桥杯零基础单片机教程9 I2C介绍(上)
- easyx 备忘录_报到?上课?我被自己的备忘录骗到了
- 深入学习SpringMVC以及学习总结
- 软件测试 学习之路 基本介绍
- 蓝宝石会升级bios吗_别再听别人忽悠!升级BIOS的三大误区
- 远程计算机关闭了怎么办,怎么远程关闭电脑 远程关闭电脑方法【详细步骤】...
- html鼠标自动向下滑动,基于JavaScript实现鼠标向下滑动加载div的代码
- Java 输入一个整数,计算它各位上数字的和。(注意:是任意位的整数)
- 数据库的事务隔离级别
- 视频编解码(五):解码器驱动代码理解
- PS小技巧 | 不需要抠图的黑白配
- G - Power Strings
- 算法导论第三版习题及答案
- java出现com.lowagie.text。DocumentException:字体“C: \ Windows \ \ simsun字体。带有'Identity-H'的ttc'不被识别的错误
- 基于Java医院网上预约挂号系统设计与实现(含源代码)
- w10打游戏老是弹出计算机,win10游戏频繁弹回桌面怎么办_win10玩游戏总切回桌面的解决方法-系统城...
热门文章
- hⅰgh怎么读音发音英语_英语发音规则---gh
- 芯片测试的目的及原理介绍
- excel 复选框 制作动态表格
- 论文查重系统如何才安全?
- c语言数字转化为英文版,(C语言编写的英语数字转化代码数字转化为用英语表达的数字.doc...
- 【Python】:修改图片后缀
- 机器学习中的数学(八):卡方分布(Chi-squared Distribution) t分布(T Distribution)F分布(T Distribution)
- 使用高德地图JS API开发地图应用之获取Key及Jscode
- linux mentohust dhcp,校园网锐捷 openwrt mentohust 成功开启IPv6
- Neutron的Port详解