您的位置:首页 > 编程语言 > Lua

150. Evaluate Reverse Polish Notation

2017-06-05 22:44 369 查看
Evaluate Reverse Polish Notation
Description

Implementation

150. Evaluate Reverse Polish Notation

Description

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


Implementation

This problem can be tackled by stack operation. Utilize stack to store operands and when meeting with operation, pop the operands and push the result back into stack. In the end, the top element of the stack is the result we needed.

Be careful about minus like “-1”.

class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> operand;
int size = tokens.size();

for(int idx = 0; idx < size; idx++) {
int str_len = tokens[idx].size();
if(str_len == 1 && (tokens[idx] == "+" || tokens[idx] == "-" || tokens[idx] == "*" || tokens[idx] == "/")) {
int op1 = operand.top();
operand.pop();
int op2 = operand.top();
operand.pop();
switch(tokens[idx][0]){
case '+':
operand.push(op1+op2);
break;
case '-':
operand.push(op2-op1);
break;
case '*':
operand.push(op2*op1);
break;
case '/':
operand.push(op2/op1);
break;
default:
break;
}
}
else {
int tmp = 0;
int sign = 1;
if(tokens[idx][0] == '-') sign = -1;
else tmp = tokens[idx][0] - '0';
for(int idx2 = 1; idx2 < str_len; idx2++)
tmp = tmp*10 + tokens[idx][idx2] - '0';
operand.push(tmp*sign);
}
}

if(operand.size() > 0) return operand.top();
else return 0;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息