leetcode--Evaluate Reverse Polish Notation

题目:https://leetcode.com/problems/evaluate-reverse-polish-notation/

其实中文意思就是根据后缀表达式来求表达式结果!!

解题思路:就是利用栈来实现啦!遇到数字入栈,遇到运算符出栈两个数进行运算!

源代码如下:

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> number;
        
        for(int i = 0 ; i < tokens.size();i++)
        {
            if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")
            {
                int n1 = 0;
                int n2 = 0;
                n1 = number.top();
                number.pop();
                n2 = number.top();
                number.pop();
                if(tokens[i] == "+")
                    number.push(n1+n2);
                else if(tokens[i] == "-")
                    number.push(n2-n1);
                else if(tokens[i] == "*")
                    number.push(n1*n2);
                else if(tokens[i] == "/")
                {
                    if(n1 != 0)
                     number.push(n2/n1);
                }
            }
            else
            {
                number.push(atoi(tokens[i].c_str()));
            }
        }
        if(!number.empty())
           return number.top();
        
    }
};


小结:

之前未判断除法的时候除数为0的情况,出现错误:Last executed input: ["0","3","/"]  。

这个题本身难度系数不高,只要学过stack的人都会想到,毕竟数据结构的书上有相关的内容,但是细节问题值得注意。

1)vector<string> & tokens这个参数是字符串的容器,里面的运算符均是字符串形式存储 : "+" "-" "*"  "/"并非单引号的一个字符,就相当于‘a’代表字符a,但是”a“其实是字符串'a'+'\0'

2) 使用atoi()函数进行字符转为整数时出错,在于atoi()的参数是const char* str,但是tokens却是string类型。

注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。如果要将string直接转换成const char *类型。string有2个函数可以运用。
一个是.c_str(),一个是data成员函数。

具体关于char* str 和 string 之间的关系见http://blog.csdn.net/cogbee/article/details/8931838

3)刚开始打算用switch结构来对运算符进行判别,但是最后发现在C++中switch的选择因子只能是整数。所以最终转为if---else结构。

4)还要考虑特殊情况,比如这题的分母为0的时候。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值