【leetcode】Evaluate Reverse Polish Notation

来源:互联网 发布:linux命令vi怎么退出 编辑:程序博客网 时间:2024/06/06 00:41

链接: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();}

0 0
原创粉丝点击