【LeetCode 227】 Basic Calculator II

博客围绕模拟四则运算展开,介绍了实现思路,即使用栈保存数字,根据上一个运算符号对数字进行不同操作,最后将栈内数字相加。虽提及代码实现,但未给出具体代码,还包含一些个人感慨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

模拟四则运算。

思路:

用栈保存数字,只记录上一个运算符号。每次遍历到一个数字,上一个运算符如果是+,push到栈,-,push当前的相反数,* 或 / ,当前数字和栈顶数字做运算,结果push到栈。最后把栈内数字相加。

代码:

class Solution {
public:
    int calculate(string s) {
        int len = s.length();
        stack<int> st;
        char op;
        for (int i=0; i<len; ++i) {
            if (s[i] == ' ') continue;
            else if (s[i] >= '0' && s[i] <= '9') {
                int temp = 0;
                while(i < len && s[i] >= '0' && s[i] <= '9') {
                    temp = temp * 10 + (s[i] - '0');
                    i++;
                }
                i -= 1;
                if (st.empty() || op == '+') {
                    st.push(temp);
                }else if (op == '-') {
                    st.push(-temp);
                }else {
                    int pre = st.top();
                    st.pop();
                    if (op == '*') {
                        st.push(pre * temp);
                    } else {
                        st.push(pre / temp);
                    }
                }
            }else op = s[i];
        }
        int ans = 0;
        while(!st.empty()) {
            ans = ans + st.top();
            st.pop();
        }
        return ans;
    }
};

这个模拟题卡了好久好久好久。。。脑壳痛。
baseline终于出了。。。这个月好像过的有点混乱。
已经过去2/3了。。。心酸。
没有故事的520,心酸。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值