[JavaScript 刷题] 栈 - 逆波兰表达式求值, leetcode 150
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 栈 - 逆波兰表达式求值, leetcode 150相关的知识,希望对你有一定的参考价值。
[javascript 刷题] 栈 - 逆波兰表达式求值, leetcode 150
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目地址:
题目
如下:
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, and /
. Each operand may be an integer or another expression.
Note that division between two integers should truncate toward zero.
It is guaranteed that the given RPN expression is always valid. That means the expression would always evaluate to a result, and there will not be any division by zero operation.
解题思路
这道题拆接下来就是:
-
每个运算符号前会有两个数字
如:
["2","1","+"]
-
运算符号前的数字可能通过其他的运算获得
如:
["2","1","+","3","*"]
,*
号前有两个3
,其中一个3
的获取方式为["2","1","+"]
这种方式理解的话,使用栈就能够比较好的解决这个问题,只要将所有碰到的数字全都保存到栈中,遇到一个运算符号就 pop 出栈中的最后两个数字,进行运算后继续存入栈中,如此往复。
在题目中保证了输入条件一定是一个合法的 RPN expression 的大前提条件下,最终栈中只会保存一个数字,也就是返回值——最终的运算结果。
使用 JavaScript 解题
/**
* @param string[] tokens
* @return number
*/
var evalRPN = function (tokens)
const numStack = [];
for (let i = 0; i < tokens.length; i++)
if (!isNaN(parseInt(tokens[i])))
numStack.push(parseInt(tokens[i]));
else
const secondNum = numStack.pop();
const firstNum = numStack.pop();
switch (tokens[i])
case "+":
numStack.push(1 * firstNum + 1 * secondNum);
break;
case "-":
numStack.push(firstNum - secondNum);
break;
case "*":
numStack.push(firstNum * secondNum);
break;
case "/":
console.log(firstNum, secondNum);
console.log(firstNum / secondNum);
numStack.push(parseInt(firstNum / secondNum));
break;
default:
// may need to throw some error here
return numStack.pop();
;
以上是关于[JavaScript 刷题] 栈 - 逆波兰表达式求值, leetcode 150的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—_150_逆波兰表达式求值(栈)—day04