leetcode 150. 逆波兰表达式求值

day11

用栈来解决,出现一个字符,就操作前面存过的字符

1.括号匹配,出现了右括号,就判断栈顶元素是否匹配

2.字母消除,每碰到一个元素,就判断是否与栈顶相同,相同就弹出,不相同就压入

3.表达式  碰到数字就压入,碰到操作符就取出栈顶的元素

思路:

碰到数字就存入栈,碰到操作符就取出栈顶的两个元素,操作之后,压入栈

注意点:

1. long long

2.类型转化:

string -- > 其他类型    stoll stoi stod

常用的 stoll stod , 因为可以向下兼容

3. 是用 num2 - num1 。 因为栈出来的顺序是相反的。后入先出

class Solution {
stack<long long> st;
public:
    int evalRPN(vector<string>& tokens) {
        for(int i = 0; i <tokens.size(); i++)
        {
            if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")
            {
                long long  num1 = st.top(); st.pop();
                long long  num2 = st.top(); st.pop();

                if(tokens[i] == "+") 
                    st.push(num1 + num2);
                else if(tokens[i] == "-")
                    st.push(num2 - num1);
                else if(tokens[i] == "*")
                    st.push(num2 * num1);
                else    
                    st.push(num2/num1);
            }
            else
                st.push(stoll(tokens[i]));     // 注意类型转化  string --> long long
        }
        
        return st.top();
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值