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];
};
相关推荐
可乐鸡翅yeah_18 分钟前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
Chen—LSN22 分钟前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
kyriewen25 分钟前
我实测了前端日期的 5 个坑:差 8 小时只是开始
前端·javascript·程序员
anew___27 分钟前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法
今年下半年35 分钟前
【VUE3】移动端:使用腾讯地图显示区域统计与放大显示资产点位
javascript·前端框架·vue·地图
Chen—LSN1 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
a努力。1 小时前
LangChain Agent消息链路全解析
java·前端·javascript
今年下半年1 小时前
【前端】ant-design-vue 表格「行、列都动态」的处理方案
前端·javascript·vue.js
程序员yu1 小时前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法
Allen_LVyingbo2 小时前
信息化部门在AI时代的编程转移路径分析(上)
人工智能·python·算法·健康医疗·数据库开发·时序数据库·数据库架构