leetcode——224.基本计算器

思路

  1. 题目符号只有+和-,每个数字的符号取决于其前面若干符号的作用
  2. 维护一个符号栈,当前的真正符号为数字前面的符号和前面若干符号的作用
  3. 遇到 “(” 进行符号的压入,遇到 “)” 进行符号的弹出
  4. 例如 1+5-(9+(8-1)) 那么8的真正符号为 + - + 最终为 -
  5. 最后只需要对字符串进行若干次加法即可(加正数或负数)

代码

class Solution {
public:
    int calculate(string s) {
        stack<int> ops;ops.push(1);//符号栈
        int sign = 1;//当前符号
        int ans = 0;
        int i = 0;
        //字符串开始扫描
        while (i < s.length()) {
            if (s[i] == ' ') {//空格跳过
                i++;
            } else if (s[i] == '+') {//符号融合
                sign = ops.top();
                i++;
            } else if (s[i] == '-') {//符号融合
                sign = -ops.top();
                i++;
            } else if (s[i] == '(') {//符号压入
                ops.push(sign);
                i++;
            } else if (s[i] == ')') {//符号弹出
                ops.pop();
                i++;
            } else {//数字整合
                long num = 0;
                while (i < n && s[i] >= '0' && s[i] <= '9') {
                    num = num * 10 + s[i] - '0';
                    i++;
                }
                ans += sign * num;
            }
        }
        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值