LeetCode150. 逆波兰表达式求值

每道题的方法:

最后总结写

题目一链接:150. 逆波兰表达式求值 - 力扣(LeetCode)

思路:如果当前字符串是算术运算符,则取出栈中两个元素进行运算,否则将数字字符串压入栈中

代码:

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<long long> st;//过程中的数值可能很大所以需要<ll>类型的
        for(int i = 0;i < tokens.size();i ++) {
            //注意st里面都是字符串,所以不能用字符判断0到9
            if(tokens[i] == "+" || tokens[i] == "—" || tokens[i] == "*" || tokens[i] == "/") {
                long long nums1 = st.top();
                st.pop();
                long long nums2 = st.top();
                st.pop();
                //注意弹出来的两个数的计算顺序,nums2/nums1
                if(tokens[i] == "+") {
                //算术运算符可以将字符串自动转化为数字
                st.push(nums2 + nums1);
                }

                if(tokens[i] == "-") {
                st.push(nums2 - nums1);
                }

                if(tokens[i] == "*") {
                st.push(nums2 * nums1);
                }

                if(tokens[i] == "/") {
                st.push(nums2 / nums1);
                }
                }
            else {
                //将字符串转化为数字的操作
                st.push(stoll(tokens[i]));
            }
        }

        long long result = st.top();
        return result;
    }
};

难点:

解释细节1:因为此题的容器是字符串数组,所以不能用单纯的字符相等来做,而是字符串相等

解释细节2:用后面的数除前面的数

解释细节3:算术运算符可以自动将字符串转化为数字

解释细节4:因为它本身是字符串而不是数字,所以要用stoll转化

额外细节:存储运算结果的数据类型需要是long long

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值