码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:Evaluate Reverse Polish Notation

时间:2014-05-18 08:09:15      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:数据结构      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

解题思路:

    由于题目给出的已经是一个求值表达式的后缀式(又称“波兰式”),所以不用我们自己再将

求值表达式转换为后缀式。既然已知后缀式,那求取表达式的值就比较简单了。

    步骤:
         
        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

标签:数据结构      leetcode   

原文地址:http://blog.csdn.net/dream_you_to_life/article/details/26075627

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!