【代码随想录-Leetcode第四题:150. 逆波兰表达式求值】

这篇具有很好参考价值的文章主要介绍了【代码随想录-Leetcode第四题:150. 逆波兰表达式求值】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

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

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

注意:

  • 有效的算符为 ‘+’、‘-’、‘*’ 和 ‘/’ 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。
    测试样例1:
输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

测试样例2:

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

解题思路

**思路:**遇到数字就进行入栈,遇到符号就取弹出两个元素再操作后再次将计算结果压如栈中,栈中最后就会只剩下一个最终的结果,取栈顶元素也就是所要求的结果了。

注意:

1、由于stl的st.pop()没有返回值,所以可以执行先取栈顶元素后再删除

2、逆波兰后缀表达式从栈顶弹出元素时,先弹出来的作为被减数,也就是右面的数,后弹出来的是前面的数,例如num1是先弹出来的,num3是后弹出来的,则 num2 操作数 num1,前缀表达式相反。

3、题目要求 1 <= tokens.length <= 104,故而 使用long long类型

stoll 此函数将在函数调用中作为参数提供的字符串转换为long long int。它解析str并将其内容解释为指定基数的整数,并将其作为long long int类型的值返回文章来源地址https://www.toymoban.com/news/detail-641353.html

//


//@i want to 舞动乾坤 2023/08/10
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
      
         stack<long long> st; 
     for(int i=0;i<tokens.size();i++){
         //如果为操作符号
         if(tokens[i]=="+" || tokens[i]=="-" || tokens[i]=="*" || tokens[i]=="/"){
          long long  opera_num1=st.top();//取栈顶第一个操作数
          st.pop();//删除元素
          long long opera_num2=st.top();//取第二个操作数
           st.pop();//删除第二个元素,无返回值
     
              if(tokens[i]=="+") //如果是加号
              st.push(opera_num2+opera_num1);//将操作数计算的结果压入栈中
              if(tokens[i]=="-") //
              st.push(opera_num2-opera_num1);
              if(tokens[i]=="*") //
              st.push(opera_num2*opera_num1);
              if(tokens[i]=="/") //
              st.push(opera_num2/opera_num1);

            
         }else{//如果是数字,就进行入栈
         st.push(stoll(tokens[i]));
         }

     }
     return st.top();//遍历完成后栈中只剩最终的一个结果,取栈顶元素即可。
    }
};

到了这里,关于【代码随想录-Leetcode第四题:150. 逆波兰表达式求值】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录第四十八天

    题目链接 : 打家劫舍I 自己的思路 :想不太出来递推公式!!!! 正确思路 :这个题主要是看是否偷第下标为i的房间;直接动规五部曲:1、dp数组的含义:dp[i]表示从下标0到下标i(包括下标i,但不一定偷下标i)所能偷到的最大金钱数;2、递推公式:分为偷下标i和不偷下标

    2024年02月12日
    浏览(32)
  • 代码随想录Leetcode70. 爬楼梯

            空间复杂度为O(N),如果想要优化空间复杂度,则只用三个变量进行状态转移也可以,参考 代码随想录 Leetcode509. 斐波那契数-CSDN博客

    2024年02月19日
    浏览(35)
  • 代码随想录Leetcode 343. 整数拆分

            dp[i]表示i所能拆分的最大乘积,则dp[i] 与dp[i - 1]的递推公式是:                 max( 1~n * dp[n ~ 1])

    2024年02月21日
    浏览(40)
  • 代码随想录 Leetcode18. 四数之和

            不行了,今天做了太多n数之和要吐了,太恶心了,一堆剪枝,去重太恶心人了。最后还是照着卡哥的改

    2024年01月17日
    浏览(73)
  • 代码随想录 LeetCode数组篇 二分查找

    # (简单)704. 二分查找 题目链接 代码随想录 - 二分查找思路 二分查找,思路很简单,但是在while循环left和right的比较是写=还是,还有right=mid还是right=mid-1容易混淆 需要想清楚对区间的定义,是[left,right],还是[left,right) (版本一,左闭右闭版本) (版本二,左闭右开) 题目

    2024年02月02日
    浏览(33)
  • 【代码随想录-Leetcode第二题:27.移除元素】

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的 样例:示例 1: 解释:函数

    2024年02月14日
    浏览(34)
  • 代码随想录 Leetcode142. 环形链表 II

            双指针解决百分之99的链表题

    2024年01月19日
    浏览(33)
  • 【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来螺旋矩阵的分享 ✨ 给你一个正整数 n ,生成一个包含 1 到 n 2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 示例 2: 提示: 思路: 本类型题目其实都不涉及什么算法,就是模拟

    2024年02月16日
    浏览(37)
  • 【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59-54

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来螺旋矩阵的分享 ✨ 给你一个正整数 n ,生成一个包含 1 到 n 2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 示例 2: 提示: 思路: 本类型题目其实都不涉及什么算法,就是模拟

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包