[150]逆波兰表达式求值js
- 软件开发
- 2025-08-05 14:03:02

题目描述:
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。
*
* 请你计算该表达式。返回一个表示表达式值的整数。
逆波兰表达式:
*
* 逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。
*
*
* 平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
* 该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。
*
*
* 逆波兰表达式主要有以下两个优点:
*
*
* 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
* 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中
解题思路:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中
除法注意小于0向上取整,大于0向下取整
解法一: function evalRPN(tokens) { let stask = []; for (let i = 0; i < tokens?.length; i++) { // 数字入栈 if (/\d/.test(tokens[i])) { stask.push(+tokens[i]); } else { const secNum = stask.pop(); const firNum = stask.pop(); eval( `stask.push(${firNum} ${tokens[i]} ${secNum} < 0 ? Math.ceil(${firNum} ${tokens[i]} ${secNum}) : Math.floor(${firNum} ${tokens[i]} ${secNum}))`, ); } } return stask.pop(); };用时:
// Your runtime beats 20.53 % of typescript submissions
// Your memory usage beats 5.27 % of typescript submissions (59.6 MB)
优化除法的取整 实际上就是 Math.trunc 去掉小数部分
eval(`stask.push(Math.trunc(${firNum} ${tokens[i]} ${secNum}))`)[150]逆波兰表达式求值js由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[150]逆波兰表达式求值js”