leetcode150. 逆波兰表达式求值

思路:

 遍历string,如果遇到数字就转化成整数然后压栈,如果遇到符号就出栈两次进行运算,把运算结果压栈,最后栈里只剩下一个元素就是答案。

注意:

  我在做的时候写了一个fun去转化数字字符串和整数,还忘记了负数的存在,可以使用stoi函数一步完成。

代码:

class Solution {

public:

    int fun(string s){

        int flag=0;if(s[0]=='-')flag=1;

        int n=s.size();int num=0;

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

            num*=10;

               num+=s[i]-'0';

        }

        if(flag)return -1*num;

        return num;

    }

    int evalRPN(vector<string>& tokens) {

    stack<int>mystack;int sum=0;

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

            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){

                     int num2=mystack.top();

                      mystack.pop();

                     int num1=mystack.top();

                      mystack.pop();

                if(tokens[i]=="+"){

                    sum=num1+num2;

                    mystack.push(sum);

                }else if(tokens[i]=="-"){

                    sum=num1-num2;

                    mystack.push(sum);

                }else if(tokens[i]=="*"){

                    sum=num1*num2;

                    mystack.push(sum);

                }else if(tokens[i]=="/"){

                    sum=num1/num2;

                    mystack.push(sum);

                }    

            }else{

               mystack.push(fun(tokens[i]));

            }

         }

     return mystack.top();

    }   

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值