※ 引述《JerryChungYC (JerryChung)》之铭言:
: https://leetcode.com/problems/evaluate-reverse-polish-notation
: 150. Evaluate Reverse Polish Notation
: 回传逆波兰表示法的结果值
: 有效运算子为 "+" "-" "*" "/"
: 每个操作数会是整数或是另一个表达式
: 两个整数之间的除法是向零截断
: 不会有被零除的情况
: 答案和中间计算都可以用32位元整数表示
: Example 1:
: Input: tokens = ["2","1","+","3","*"]
: Output: 9
: Explanation: ((2 + 1) * 3) = 9
: Example 2:
: Input: tokens = ["4","13","5","/","+"]
: Output: 6
: Explanation: (4 + (13 / 5)) = 6
耍废太久,要回来乖乖找工作了
我也来写个
C++ code
#include<unordered_set>
class Solution {
public:
int evalRPN(vector<string>& tokens) {
unordered_set<string> op = {"+", "-", "*", "/"};
stack<string> s;
for (int i = 0; i < tokens.size(); ++i)
{
if (op.find(tokens[i]) == op.end()) s.push(tokens[i]);
else
{
int num1 = stoi(s.top());
s.pop();
int num2 = stoi(s.top());
s.pop();
int ret = operate(num1, num2, tokens[i]);
s.push(to_string(ret));
}
}
return stoi(s.top());
}
int operate(int num1, int num2, string op)
{
if (op == "+") return num2+num1;
else if (op == "-") return num2-num1;
else if (op == "*") return num2*num1;
else if (op == "/") return num2/num1;
else return 0;
}
};