题目描述:
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 evalRPN(vector<string> &tokens) { int length = tokens.size(); stack<int> num_stack; for(int i = 0;i < length;i++) { if(strcmp(tokens[i].c_str(),"*") == 0) { int number1 = num_stack.top(); num_stack.pop(); int number2 = num_stack.top(); num_stack.pop(); int result = number1 * number2; num_stack.push(result); } else if(strcmp(tokens[i].c_str(),"/") == 0) { int number1 = num_stack.top(); num_stack.pop(); int number2 = num_stack.top(); num_stack.pop(); int result = number1 / number2; num_stack.push(result); } else if(strcmp(tokens[i].c_str(),"+") == 0) { int number1 = num_stack.top(); num_stack.pop(); int number2 = num_stack.top(); num_stack.pop(); int result = number1 + number2; num_stack.push(result); } else if(strcmp(tokens[i].c_str(),"-") == 0) { int number1 = num_stack.top(); num_stack.pop(); int number2 = num_stack.top(); num_stack.pop(); int result = number1 - number2; num_stack.push(result); } else { int num = atoi(tokens[i].c_str()); num_stack.push(num); } } return num_stack.top(); }
LeetCode:Evaluate Reverse Polish Notation
原文地址:http://blog.csdn.net/yao_wust/article/details/41477111