150. Evaluate Reverse Polish Notation

来源:互联网 发布:淘宝网情侣装dongji 编辑:程序博客网 时间:2024/06/05 16:26

  • 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;    }};
原创粉丝点击