zoukankan      html  css  js  c++  java
  • LeetCode 224. 基本计算器

    题目描述

    实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。

    示例1:

    输入:s = "1 + 1"
    输出:2
    

    示例2:

    输入:s = " 2-1 + 2 "
    输出:3
    

    示例3:

    输入:s = "(1+(4+5+2)-3)+(6+8)"
    输出:23
    

    提示:

    • 1 <= s.length <= 3 * 105
    • s 由数字、'+''-''('')'、和 ' ' 组成
    • s 表示一个有效的表达式

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/basic-calculator

    思路解析

    这道题仅包含 +- 两种运算符,不需要考虑运算符优先级的问题。
    加入给定一个仅包含 +-,不含括号的式子,那么求解将变得十分简单,而加上括号之后,我们需要考虑的是,一个数字在整个式子里应该是被加上还是被减去?(即这个数字的真正符号是?)
    对任意一个数字,我们假设该数字外面有 n 层括号包裹,那么这个数字的正负性应当这样考虑:记录每层括号前的一个运算符,以及该数字前的运算符,通过负负得正,判断该数字的真正符号。
    继续思考,发现 + 并不改变一个数字的正负性,我们需要记录该数字的每层括号前的符号中,有几个 -

    用一个栈记录每一层括号前的符号,代码如下:

    代码实现

    class Solution {
    public:
        int calculate(string s) {
            stack<int> ops;
            ops.push(1);
    
            int ans = 0;
            int i = 0;
            int sign = 1;
            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 < s.length() && s[i] >= '0' && s[i] <= '9') {
                        num = num * 10 + s[i] - '0';
                        i++;
                    }
                    ans += sign * num;
                }
            }
    
            return ans;
        }
    };
    
  • 相关阅读:
    最大流算法FordFulkson方法的基本思想与EdmondKarp算法
    nefu 474 The Perfect StallHal Burch 二分图最大匹配
    NEFU 485 分配问题
    jQuery插件tablesorter
    flashplayer
    个人薪酬查询
    Shockwave
    phpwind安装
    aspx特殊符号说明
    uploadfy火狐兼容性问题
  • 原文地址:https://www.cnblogs.com/xqmeng/p/14510607.html
Copyright © 2011-2022 走看看