当前位置: 首页 > news >正文

每日一题(LeetCode)----栈和队列--逆波兰表达式求值

每日一题(LeetCode)----栈和队列–逆波兰表达式求值

1.题目(150. 逆波兰表达式求值)

  • 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

    请你计算该表达式。返回一个表示表达式值的整数。

    注意:

    • 有效的算符为 '+''-''*''/'
    • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
    • 两个整数之间的除法总是 向零截断
    • 表达式中不含除零运算。
    • 输入是一个根据逆波兰表示法表示的算术表达式。
    • 答案及所有中间计算结果可以用 32 位 整数表示。

    示例 1:

    输入:tokens = ["2","1","+","3","*"]
    输出:9
    解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
    

    示例 2:

    输入:tokens = ["4","13","5","/","+"]
    输出:6
    解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
    

    示例 3:

    输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
    输出:22
    解释:该算式转化为常见的中缀算术表达式为:((10 * (6 / ((9 + 3) * -11))) + 17) + 5
    = ((10 * (6 / (12 * -11))) + 17) + 5
    = ((10 * (6 / -132)) + 17) + 5
    = ((10 * 0) + 17) + 5
    = (0 + 17) + 5
    = 17 + 5
    = 22
    

    提示:

    • 1 <= tokens.length <= 104
    • tokens[i] 是一个算符("+""-""*""/"),或是在范围 [-200, 200] 内的一个整数

    逆波兰表达式:

    逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

    • 平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )
    • 该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )

    逆波兰表达式主要有以下两个优点:

    • 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
    • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

2.解题思路

思路一:使用栈

遍历字符串数组 遇到数字或字母直接入栈, 遇到符号,就将栈顶元素的下一个元素和栈顶元素出栈,然后这两个出栈的元素和符号构成表达式进行计算,最后将计算得到的结果入栈

3.写出代码

思路一的代码

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> sta;int length=tokens.size();for(int i=0;i<length;i++){if(tokens[i]!="+"&&tokens[i]!="-"&&tokens[i]!="*"&&tokens[i]!="/"){sta.push(atoi(tokens[i].c_str()));}else{//栈顶元素int temp1=sta.top();sta.pop();//栈顶的下一个元素int temp2=sta.top();sta.pop();if(tokens[i]=="+"){sta.push(temp2+temp1);}if(tokens[i]=="-"){sta.push(temp2-temp1);}if(tokens[i]=="*"){sta.push(temp2*temp1);}if(tokens[i]=="/"){sta.push(temp2/temp1);}}}int res=sta.top();sta.pop();return res;}
};
http://www.lryc.cn/news/263808.html

相关文章:

  • 2023年第四届 “赣网杯” 网络安全大赛 gwb-web3 Write UP【PHP 临时函数名特性 + 绕过trim函数】
  • 软件设计师——软件工程(一)
  • 阿里云|人工智能(AI)技术解决方案
  • Axure中继器的使用
  • 猫罐头哪个牌子好性价比高?五大性价比高的品牌推荐
  • 宣布推出 ML.NET 3.0
  • 常见的排序算法---快速排序算法
  • hive企业级调优策略之分组聚合优化
  • 英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案
  • 【openssl】Linux升级openssl-1.0.1到1.1.1
  • 美国联邦机动车安全标准-FMVSS
  • 龙迅LT6211B,HDMI1.4转LVDS,应用于AR/VR市场
  • 解决docker拉取镜像错误 missing signature key 问题
  • 倒计数器:CountDownLatch
  • vue内容渲染
  • Kafka为什么能高效读写数据
  • Flink系列之:Table API Connectors之Debezium
  • 【Python基础】文件读写
  • 电脑风扇控制软件Macs Fan Control mac支持多个型号
  • clangd:Couldn‘t build compiler instance
  • Springboot启动出现Error to process server push response的解决方法
  • P2P网络下分布式文件共享场景的测试
  • 计算机组成原理综合1
  • 探秘 AJAX:让网页变得更智能的异步技术(下)
  • CentOs7.x安装部署SeaTunnelWeb遇到的坑
  • Netlink通信
  • Python打造简单而强大的聊天机器人:详解与实例代码
  • Unity 通过代码将一张大图切成多个小图的方法
  • Spring Cloud Gateway请求路径修改指南:详解ServerWebExchange的完美解决方案及代码示例
  • AI+爬虫 爬虫宝