链接:https://oj.leetcode.com/problems/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
本题比较简单:
借助一个栈很容易就求出表达式的值int stringToNumber(string & str) { int len = str.length(); int result = 0; int i = 0; int factor = 1; if( str[0] == '-'){ factor = -1; i = 1; }else if( str[0] == '+') { i = 1; } for(; i < len; ++i) { result *= 10; result += str[i] - '0'; } return factor*result; } int evalRPN(vector<string> & tokens) { int size = tokens.size(); if(size <= 0) return 0; vector<int> numStack; int a, b; for(int i = 0; i < size; ++i) { string tempstr = tokens.at(i); int operatorType = -1; if( tempstr.compare("+") == 0){ operatorType = 0; }else if( tempstr.compare("-") == 0){ operatorType = 1; }else if( tempstr.compare("*") == 0){ operatorType = 2; }else if( tempstr.compare("/") == 0){ operatorType = 3; }else{ operatorType = -1; numStack.push_back( stringToNumber(tempstr) ); } if( operatorType != -1) { b = numStack.back(); numStack.pop_back(); a = numStack.back(); numStack.pop_back(); switch(operatorType) { case 0: a = a + b; break; case 1: a = a - b; break; case 2: a = a * b; break; case 3: a = a / b; break; } numStack.push_back(a); } } return numStack.back(); }
。