问题:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/
根据逆波兰表示法,求表达式的值。 有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 示例 1: 输入: ["2", "1", "+", "3", "*"] 输出: 9 解释: ((2 + 1) * 3) = 9 示例 2: 输入: ["4", "13", "5", "/", "+"] 输出: 6 解释: (4 + (13 / 5)) = 6 示例 3: 输入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"] 输出: 22 解释: ((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
GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/EvalRPNClass.cs
Blog:https://www.cnblogs.com/zxxxx/
一、逆波兰式
二、逆波兰式求值
思路:从左至右遍历整个字符串,数字入栈,遇到操作符取栈首两个数字求值后再次压栈
public int EvalRPN(string[] tokens) { var value = new Stack<int>(); foreach (var s in tokens) { if (s != "+" && s != "-" && s != "*" && s != "/") { value.Push(Convert.ToInt32(s)); continue; } var a = value.Pop(); var b = value.Pop(); switch (s) { case "+": value.Push(b + a); break; case "-": value.Push(b - a); break; case "*": value.Push(b * a); break; case "/": value.Push(b / a); break; default: break; } } return value.Pop(); }