我正在嘗試在 JavaScript 中實現(xiàn)反向波蘭符號算法。問題:計算反向波蘭表示法中算術(shù)表達(dá)式的值。有效的運算符是 +、-、*、/。每個操作數(shù)可以是一個整數(shù)或另一個表達(dá)式。筆記:兩個整數(shù)之間的除法應(yīng)截斷為零。給定的 RPN 表達(dá)式總是有效的。這意味著表達(dá)式將始終計算結(jié)果并且不會有任何被零除的操作。例子:Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]Output: 22Explanation:?? ((10 * (6 / ((9 + 3) * -11))) + 17) + 5= ((10 * (6 / (12 * -11))) + 17) + 5= ((10 * (6 / -132)) + 17) + 5= ((10 * 0) + 17) + 5= (0 + 17) + 5= 17 + 5= 22我的解決方案:var evalRPN = function(tokens) {? ? let set = new Set();? ? set.add('+');? ? set.add('-');? ? set.add('/');? ? set.add('*');? ??? ? let i = 0;? ? while(tokens.length > 1) {? ? ? ? if(set.has(tokens[i+2])) {? ? ? ? ? ? const result = calculate(parseInt(tokens[i]), parseInt(tokens[i+1]), tokens[i+2]);? ? ? ? ? ? tokens.splice(i, 3, result);? ? ? ? ? ? i = 0;? ? ? ? } else? ? ? ? ? ? i++;? ? }? ??? ? return tokens[0];};? ??const calculate = (left, right, operator) => {? ? let res;? ? switch(operator) {? ? ? ? case '+':? ? ? ? ? ? res = left + right;? ? ? ? ? ? break;? ? ? ? case '-':? ? ? ? ? ? res = left - right;? ? ? ? ? ? break;? ? ? ? case '*':? ? ? ? ? ? res = left * right;? ? ? ? ? ? break;? ? ? ? case '/':? ? ? ? ? ? res = left / right;? ? ? ? ? ? break;? ? }? ??? ? return res;}我的代碼返回 12,但答案應(yīng)該是 11。
在 JavaScript 中評估反向波蘭表示法算法
牛魔王的故事
2023-06-15 17:36:37