题意:
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 解题思路: 由于题目给出的已经是一个求值表达式的后缀式(又称“波兰式”),所以不用我们自己再将 求值表达式转换为后缀式。既然已知后缀式,那求取表达式的值就比较简单了。 步骤: 1.如果当前是操作符,从栈中取出栈顶的两个元素,将其表达式的值入栈. 2.如果当前是数字,直接将其入栈. 3.不断重复上述过程,直到遍历完整个后缀式,最后,栈顶就是所要求的值. 下面是解题代码:class Solution { public: int evalRPN(vector<string> &tokens) { stack<int> stk; for(unsigned i=0,len=tokens.size();i<len;++i) { if(tokens[i].size() == 1 && ( tokens[i][0] < ‘0‘ || tokens[i][0] > ‘9‘)) { char opt = tokens[i][0] ; int a , b ; b = stk.top() , stk.pop(); a = stk.top() , stk.pop(); if(opt == ‘+‘ || opt == ‘-‘) stk.push(opt == ‘+‘ ? a + b : a - b ); else stk.push(opt == ‘*‘ ? a * b : a / b ); continue; } bool flag = tokens[i][0] == ‘-‘ ; unsigned j = tokens[i][0] == ‘+‘ || tokens[i][0] == ‘-‘ , len1 = tokens[i].size(); int num = 0 ; for(;j<len1;++j) num = num * 10 + tokens[i][j] - ‘0‘ ; num *= flag ? -1 : 1 ; stk.push(num); } return stk.top(); } };
注:上述程序是我经过测试后台数据没有类似["-","-9"]这种后缀式的缩写代码,如果后台
存在这种数据,需要另加判断,不过,本质上都是一样的.
LeetCode:Evaluate Reverse Polish Notation,布布扣,bubuko.com
LeetCode:Evaluate Reverse Polish Notation
原文地址:http://blog.csdn.net/dream_you_to_life/article/details/26075627