leetcode150-逆波兰表达式求值

leetcode 150

思路

本题使用栈来解决,因为符号是在数字的后面,所以一开始有数字出现的时候我们先入栈,后续遇到有符号,就出栈两个数字,让后出栈的数字作为前一位运算符,先出栈的数字作为后一位运算符,进行加减乘除的操作,操作完成后,需要把当前运算结果再次入栈,因为结果是会拿来做下一次运算的,需要注意的是,除法操作过程中,可能出现小数的情况,我们需要使用parseInt操作符来进行取整,另外stack在存储的时候不能存字符串,因为字符串相加会直接拼接,而不是进行加分运算,所以存储时需要转为数字存储

例子:tokens = "2","1","+","3","\*"

1: stack = 2

2: stack = 2,1

3: 匹配到+, 需要计算2 + 1 = 3 stack = 3

4: stack = 3,3

5: 匹配到 乘法, 3*3 = 9 stack = 9

实现

js 复制代码
var evalRPN = function (tokens) {
    let stack = [];
    let symbols = ['+', '-', '*', '/']
    for (const item of tokens) {
        if (symbols.includes(item)) {
            const num1 = stack.pop();
            const num2 = stack.pop();
            if (item === '+') stack.push(num2 + num1)
            if (item === '-') stack.push(num2 - num1)
            if (item === '*') stack.push(num2 * num1)
            if (item === '/') stack.push(parseInt(num2 / num1))
        } else {
            stack.push(Number(item))
        }
    }
    return stack[0];
};
相关推荐
卷福同学12 分钟前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
至乐活着3 小时前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
Jerry3 小时前
LeetCode 383. 赎金信
算法
ai产品老杨4 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
Jerry4 小时前
LeetCode 454. 四数相加 II
算法
可编程芯片开发5 小时前
基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真
算法
Jerry5 小时前
LeetCode 202. 快乐数
算法
hans汉斯5 小时前
基于改进交叉熵损失函数与Transformer的心电信号高风险分类研究
功能测试·深度学习·算法·yolo·目标检测·分类·transformer
Jerry5 小时前
LeetCode 349. 两个数组的交集
算法
Jackson__6 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源