【leetcode面试经典150题】56. 基本计算器(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)

【题目描述】

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

【示例一】

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

【示例二】

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

【示例三】

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

【提示及数据范围】

  • 1 <= s.length <= 3 * 10的5次方
  • s 由数字、'+''-''('')'、和 ' ' 组成
  • s 表示一个有效的表达式
  • '+' 不能用作一元运算(例如, "+1" 和 "+(2 + 3)" 无效)
  • '-' 可以用作一元运算(即 "-1" 和 "-(2 + 3)" 是有效的)
  • 输入中不存在两个连续的操作符
  • 每个数字和运行的计算将适合于一个有符号的 32位 整数

【代码】

// 括号展开 + 栈

class Solution {
public:
    int calculate(string s) {
        stack<int> ops;
        ops.push(1);
        int sign = 1;

        int ret = 0;
        int n = s.length();
        int i = 0;
        while (i < n) {
            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++;
                }
                ret += sign * num;
            }
        }
        return ret;
    }
};

相关推荐

  1. leetcode面试经典15056. 基本计算器C++)

    2024-04-22 02:24:03       32 阅读
  2. leetcode面试经典15010.跳跃游戏 II(C++)

    2024-04-22 02:24:03       45 阅读
  3. Leetcode面试经典150

    2024-04-22 02:24:03       40 阅读
  4. 面试经典150(50-53)

    2024-04-22 02:24:03       62 阅读
  5. 面试经典150(55-58)

    2024-04-22 02:24:03       55 阅读
  6. leecode面试经典150

    2024-04-22 02:24:03       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 02:24:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 02:24:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 02:24:03       87 阅读
  4. Python语言-面向对象

    2024-04-22 02:24:03       96 阅读

热门阅读

  1. 简单聊聊类加载器双亲委派模型

    2024-04-22 02:24:03       38 阅读
  2. 数据类型判断的方法

    2024-04-22 02:24:03       177 阅读
  3. CSS 01

    CSS 01

    2024-04-22 02:24:03      42 阅读
  4. stm32_HAL_串口不定长数据接收发送

    2024-04-22 02:24:03       34 阅读
  5. 升级Linux 4.19至5.10 (失败手稿)

    2024-04-22 02:24:03       36 阅读
  6. yarn的安装与配置(秒懂yarn用法)

    2024-04-22 02:24:03       42 阅读