[LeetCode] Evaluate Reverse Polish Notation 스택

7678 단어 LeetCode
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


 
 
Hide Tags
 
Stack
 
제목은 스택으로 하나의 공식적인 출입을 유지하는 것입니다. 판단 방법은 괜찮습니다. 숫자가 마이너스일 수도 있다는 것을 잊어버리기 시작했고 뒤에 개선되었습니다.
 
#include <stack>

#include <iostream>

#include <string>

#include <vector>

using namespace std;



class Solution {

public:

    int evalRPN(vector<string> &tokens) {

        int n = tokens.size();

        stack<int > tmp;

        for(int i=0;i<n;i++){

            if(tokens[i][0]>='0'&&tokens[i][0]<='9'){

                tmp.push( helpFun(tokens[i]) );

                continue;

            }

            if(tokens[i][0]=='-'&&tokens[i][1]!='\0'){

                tmp.push( helpFun( tokens[i]));

                continue;

            }

            int rgt = tmp.top();

            tmp.pop();

            int lft = tmp.top();

            tmp.pop();

            switch (tokens[i][0]){

            case '+':

                tmp.push( lft + rgt );

                break;

            case '-':

                tmp.push(lft - rgt);

                break;

            case '*':

                tmp.push(lft * rgt);

                break;

            case '/':

                tmp.push(lft / rgt);

                break;

            }

        }

        return tmp.top();

    }



    int helpFun(string str)

    {

        int sum = 0,i = 0;

        if (str[0]=='-')

            i = 1;

        for(;i<str.length();i++)

            sum = sum*10+str[i]-'0';

        return str[0]=='-'?-sum:sum;

    }

};



int main()

{

    vector<string> tokens{"3","-4","+"};

    Solution sol;

    cout<<sol.evalRPN(tokens)<<endl;

//    for(int i=0;i<tokens.size();i++)

//        cout<<tokens[i]<<endl;

    return 0;

}

좋은 웹페이지 즐겨찾기