LeetCode——Evaluate Reverse Polish Notation
2014-05-05 20:32
435 查看
Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are
+,
-,
*,
/.
Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
思路:
Reverse Polish Notation(逆波兰表示法)——参考维基百科
伪代码
while有输入符号读入下一个符号
IF是一个操作数
入栈
ELSE IF是一个操作符
有一个先验的表格给出该操作符需要n个参数
IF堆栈中少于n个操作数
(错误) 用户没有输入足够的操作数
Else,n个操作数出栈
计算操作符。
将计算所得的值入栈
IF栈内只有一个值
这个值就是整个计算式的结果
ELSE多于一个值
(错误) 用户输入了多余的操作数
例子
中缀表达式“5 + ((1 + 2) * 4) − 3”写作5 1 2 + 4 * + 3 −下表给出了该逆波兰表达式从左至右求值的过程,堆栈栏给出了中间值,用于跟踪算法。
输入 | 操作 | 堆栈 | 注释 |
---|---|---|---|
5 | 入栈 | 5 | |
1 | 入栈 | 5, 1 | |
2 | 入栈 | 5, 1, 2 | |
+ | 加法运算 | 5, 3 | (1, 2)出栈;将结果(3)入栈 |
4 | 入栈 | 5, 3, 4 | |
* | 乘法运算 | 5, 12 | (3, 4)出栈;将结果(12)入栈 |
+ | 加法运算 | 17 | (5, 12)出栈;将结果 (17)入栈 |
3 | 入栈 | 17, 3 | |
− | 减法运算 | 14 | (17, 3)出栈;将结果(14)入栈 |
上述运算可以重写为如下运算链方法(用于HP的逆波兰计算器):
1 2 + 4 * 5 + 3 −
代码:
class Solution { public: int evalRPN(vector<string> &tokens) { stack<int> st; int x, y; for (int i = 0; i < tokens.size(); i++) { //说明是表达式 if ((tokens[i][0] >= '0' && tokens[i][0] <= '9') || (tokens[i].length() > 1)) { x = 0; int j = 0; if (tokens[i][0] == '-') j++; for (; j < tokens[i].length(); j++) { x = x * 10 + (tokens[i][j] - '0'); } if (tokens[i][0] == '-') x = -x; st.push(x); } else { if (st.size() < 2) return -1; x = st.top(); st.pop(); y = st.top(); st.pop(); if (tokens[i][0] == '+') st.push(x + y); else if (tokens[i][0] == '-') st.push(y - x); else if (tokens[i][0] == '*') st.push(y * x); else if (tokens[i][0] == '/') st.push(y / x); else return -1; } } return st.empty() ? 0 : st.top(); } };
相关文章推荐
- [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式
- LeetCode-Evaluate Reverse Polish Notation
- 【Leetcode】Evaluate Reverse Polish Notation
- [LeetCode]Evaluate Reverse Polish Notation(逆波兰式的计算)
- LeetCode Evaluate Reverse Polish Notation
- LeetCode | Evaluate Reverse Polish Notation
- leetcode之Evaluate Reverse Polish Notation
- LeetCode Evaluate Reverse Polish Notation
- 【LeetCode】Evaluate Reverse Polish Notation
- Leetcode: Evaluate Reverse Polish Notation (Java)
- LeetCode150:Evaluate Reverse Polish Notation
- [Leetcode] evaluate reverse polish notation 计算逆波兰表达式
- LeetCode 150. Evaluate Reverse Polish Notation
- LeetCode-Evaluate Reverse Polish Notation (Python)
- LeetCode刷题笔录Evaluate Reverse Polish Notation
- 【Leetcode】Evaluate Reverse Polish Notation
- LeetCode Evaluate Reverse Polish Notation
- Leetcode 150:Evaluate Reverse Polish Notation
- LeetCode第一题:Evaluate Reverse Polish Notation
- leetcode--Evaluate Reverse Polish Notation