LeetCode OJ--Evaluate Reverse Polish Notation

http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/

栈使用

#include <iostream>
#include <string>
#include <vector>
#include<stack>
using namespace std;

class Solution {
public:
    int toNum(string str)
    {
        int sum = 0;
        int i = 0;
        int flagPositiveOrNegative = 1;;
        if(str[0] == '-')
        {
            flagPositiveOrNegative = -1;
            i = 1;
        }
        for( i;i<str.size();i++)
        {
            sum *= 10;
            sum += str[i] - '0';    
        }
        return sum * flagPositiveOrNegative;
    }
    int evalRPN(vector<string> &tokens) {
        if(tokens.size()==0)
            return 0;
        int i = 0;
        stack<int> myStack;
        while(i<tokens.size())
        {
            if(tokens[i] == "+" || tokens[i] == "-" || tokens[i]=="*" ||tokens[i] == "/" )
            {
                int num1 = myStack.top();
                myStack.pop();
                int num2 = myStack.top();
                myStack.pop();
                if(tokens[i] == "+")
                    myStack.push(num1+num2);
                if(tokens[i] == "-")
                    myStack.push(num2-num1);
                if(tokens[i] == "*")
                    myStack.push(num1*num2);
                if(tokens[i] == "/")
                    myStack.push(num2/num1);
            }
            else
            {
                myStack.push(toNum(tokens[i]));
            }
            i++;
        }
        return myStack.top();
    }
};

int main()
{ 
    Solution myS;
    vector<string> input;
    input.push_back("3");
    input.push_back("-4");
    input.push_back("+");
    cout<<myS.evalRPN(input);
    return 0;
}
原文地址:https://www.cnblogs.com/qingcheng/p/3550032.html