LeetCode 之 Evaluate Reverse Polish Notation — C++ 实现
2015-06-19 16:15
507 查看
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
计算逆波兰式中算术表达式的值。
合法的操作符有
+,
-,
*,
/。每个操作数为整数或者另一个表达式。
例如:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
分析:
顺序扫描,遇见数字压栈,遇见操作符则从栈顶取出两个操作数(注意:先出栈的是第二个操作数),然后计算并将结果再压栈,重复此过程直到计算完毕,最后取出栈顶的元素即为结果值。
注意:下面的代码是假设输入的逆波兰式合法,没有考虑多余的操作符或者操作数不够的情况。可以通过检查栈的是否为空来达到检测的目的。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
if(tokens.empty())
{
return 0;
}
int retVal = 0;
bool isoperator = false;
stack<int> tokenStack;
int tokensSize = tokens.size();
for(int index = 0; index < tokensSize; ++index)
{
if(tokens[index] == "+" || tokens[index] == "-" || tokens[index] == "*" || tokens[index] == "/")
{
retVal = tokenStack.top();//如果为操作符,则取栈顶的两个元素参与计算
tokenStack.pop();
switch(tokens[index][0])
{
case '+':
{
retVal += tokenStack.top();
}
break;
case '-':
{
retVal = tokenStack.top() - retVal;
}
break;
case '*':
{
retVal *= tokenStack.top();
}
break;
case '/':
{
retVal = tokenStack.top() / retVal;
}
break;
default:
break;
}
tokenStack.pop();//删除第二个操作数
tokenStack.push(retVal); //计算结果压栈
}
else //数字,转换后压栈
{
tokenStack.push(atoi(tokens[index].c_str()));
}
}
return tokenStack.top();
}
};
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解
- LeetCode 2: Add Two Numbers (JAVA)
- LeetCode 1: Two Sum (JAVA)