【LeetCode 227】 Basic Calculator II

48 篇文章 1 订阅
8 篇文章 0 订阅

题目描述:

模拟四则运算。

思路:

用栈保存数字,只记录上一个运算符号。每次遍历到一个数字,上一个运算符如果是+,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,心酸。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值