首页 > 其他分享 >逆波兰表达式求值(力扣150)

逆波兰表达式求值(力扣150)

时间:2025-01-22 21:59:28浏览次数:3  
标签:tokens num1 num2 150 long st 力扣 push 求值

这道题也是一道经典的栈应用题。为什么这样说呢?我们可以发现,当我们遍历到运算符号的时候,我们就需要操控这个运算符之前的两个相邻的数。这里相邻数不仅仅指最初数组里相邻的数,在进行了运算之后,得到的结果与后面的数也可以理解为相邻。这样的涉及操作相邻元素描述是不是跟删除字符串中的所有相邻重复项(力扣1047)-CSDN博客 这道题十分类似呢?因此我们自然想到使用栈来解决这个问题。还有的注意点我写在代码注释中,代码如下:

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<long long> st;
        long long num1,num2;
        for(int i = 0;i < tokens.size();i++){
            if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/"){
                //弹出前两个数进行运算
                num1 = st.top();
                st.pop();
                num2 = st.top();
                st.pop();
                if (tokens[i] == "+") st.push(num2 + num1);
                if (tokens[i] == "-") st.push(num2 - num1);
                if (tokens[i] == "*") st.push(num2 * num1);
                if (tokens[i] == "/") st.push(num2 / num1);
            }else{
                //stoll函数将数字字符串转换为数字
                st.push(stoll(tokens[i]));
            }
        }
        //最后栈中就一个数,正是最终结果
        long long result = st.top();
        return result;
    }
};

标签:tokens,num1,num2,150,long,st,力扣,push,求值
From: https://blog.csdn.net/yaodec/article/details/145289594

相关文章

  • 翻转二叉树(力扣226)
    写这道题之前需要熟悉二叉树的遍历,可以看我的这两篇文章:二叉树的遍历(深度遍历)-CSDN博客,二叉树的层次遍历(广度优先)-CSDN博客所谓翻转二叉树,就是将每一个节点的左孩子和右孩子交换(注意这里指的是指针交换,而不是交换节点的数值)。无非就是在遍历二叉树的基础上调用一下swap......
  • 举例说明什么是短路求值?
    短路求值(short-circuitevaluation)是编程中的一个概念,特别是在使用逻辑运算符(如逻辑与&&和逻辑或||)时,如果第一个操作数的值已经能够确定整个逻辑表达式的结果,那么就不会去评估后续的操作数。这种机制可以提高代码的执行效率,避免不必要的计算或函数调用。以下是通过具体例子来说明......
  • 力扣203题(3)
    题目及之前的两种解法大家可以移步到这里:https://blog.csdn.net/suibiansa_/article/details/145242573?spm=1001.2014.3001.5501力扣203题——移除链表元素-CSDN博客今天呢我们来写一下第三种解法:虚拟创建一个头结点ListNodefirst=newListNode();first.next=head;Li......
  • Emacs折腾日记(十一)——求值规则
    截至到现在,我觉得我自己的elisp水平有了一定的提高,希望各位读者借助之前的文章也能有一些收获。现在已经可以尝试写一点elisp的程序了,但是如果想深入了解一下lisp是如何工作的,不妨先花些时间看看lisp的求值过程。对于我这样一个日常使用C/C++的程序员来说,习惯了C/C++的语法和......
  • 力扣 739. 每日温度
    ......
  • 力扣209(2)——滑动窗口?!快慢指针的pro版罢了
    题目及暴力法在我的这篇博客,有兴趣的可以移步到这里:力扣209题长度最小的子数组这次给出一种新解法滑动窗口法classmian{publicintmin(inttarget,int[]nums){//滑动窗口法,快慢指针的pro版intn=nums.length;intmin......
  • 【练习】力扣热题 100 每日温度
    题目给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,1......
  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程
    一、搜索二维矩阵编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。可以使用从右上角开始搜索的方法来有效地找到目标值。选择起始位置:从矩阵的右上角开始。......
  • 210. 课程表 II【 力扣(LeetCode) 】
    文章目录零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码零、原题链接210.课程表II一、题目描述  现在你总共有numCourses门课需要选,记为0到numCourses-1。给你一个数组prerequisites,其中prerequisites[i]=[ai,bi],表示在选修课......
  • 2025/1/15 力扣每日一题(3066. 超过阈值的最少操作数 II)
    来源:LeetCode链接:https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-ii/description/?envType=daily-question&envId=2025-01-15题目:给你一个下标从0开始的整数数组nums和一个整数k。一次操作中,你将执行:选择nums中最小的两个整数x和y......