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];
};
相关推荐
ʚ希希ɞ ྀ40 分钟前
单词接龙----图论
开发语言·javascript·ecmascript
Jasmine_llq43 分钟前
《P2656 采蘑菇》
算法·强连通分量·广度优先搜索(bfs)·tarjan 算法·图的缩点操作·有向无环图(dag)·最长路径
Liudef061 小时前
基于LLM的智能数据查询与分析系统:实现思路与完整方案
前端·javascript·人工智能·easyui
芥子沫1 小时前
《人工智能基础》[算法篇3]:决策树
人工智能·算法·决策树
mit6.8241 小时前
dfs|位运算
算法
苏纪云1 小时前
算法<C++>——双指针 | 滑动窗口
数据结构·c++·算法·双指针·滑动窗口
保持低旋律节奏1 小时前
算法——二叉树、dfs、bfs、适配器、队列练习
算法·深度优先·宽度优先
Y200309161 小时前
U-net 系列算法总结
人工智能·算法·目标跟踪
代码不停1 小时前
Java二分算法题目练习
java·算法
等一个自然而然的晴天~1 小时前
晴天小猪历险记之Hill---Dijkstra算法
算法