[LeetCode]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

解题方案:

该题借助一个栈,遍历tokens时,如果当前不为"+","-","*","/",则入栈,否则将栈顶的两个元素出栈后,运算后结果入栈。下面是该题代码:

 1 class Solution {
 2 public:
 3     int evalRPN(vector<string> &tokens) {
 4         stack<int> result;
 5         int a, b;
 6         for (vector<string>::iterator ix = tokens.begin(); ix != tokens.end(); ++ix) {
 7             if (*ix == "+" || *ix == "-" || *ix == "*" || *ix == "/") {
 8                 a = result.top();
 9                 result.pop();
10                 b = result.top();
11                 result.pop();
12                 if (*ix == "+") {
13                     result.push(b + a);
14                 }
15                 if (*ix == "-") {
16                     result.push(b - a);
17                 }
18                 if (*ix == "*") {
19                     result.push(b * a);
20                 }
21                 if (*ix == "/") {
22                     result.push(b / a);
23                 }
24             } else {
25                 result.push(atoi((*ix).c_str()));
26             }
27         }
28         return result.top();
29     }
30 };

 

posted @ 2014-09-28 09:07  skycore  阅读(158)  评论(0编辑  收藏  举报