题目描述:

逆波兰表达式求值 - 图1

代码实现:

  • 关键在于理解题意,运用栈存储数字,遍历到运算符,则取栈顶两个元素运算即可。
  • 时间复杂度:O(n)
  1. /**
  2. * @param {string[]} tokens
  3. * @return {number}
  4. */
  5. var evalRPN = function(tokens) {
  6. var calculate = (s1, s2, char) => {
  7. switch (char) {
  8. case "+":
  9. return s1 + s2
  10. case "-":
  11. return s1 - s2
  12. case "*":
  13. return s1 * s2
  14. case "/":
  15. return Math.trunc(s1 / s2)
  16. }
  17. }
  18. var stack = []
  19. var res = 0
  20. for (var i = 0; i < tokens.length; i++ ) {
  21. if (tokens[i] === "+" || tokens[i] === "-" || tokens[i] === "*" || tokens[i] === "/") {
  22. var s2 = stack.pop(),
  23. s1 = stack.pop()
  24. res = calculate(Number(s1), Number(s2), tokens[i])
  25. stack.push(res)
  26. } else {
  27. stack.push(tokens[i])
  28. }
  29. }
  30. return stack.pop()
  31. }

逆波兰表达式求值 - 图2