224. 基本计算器

224. 基本计算器

题目-困难难度

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

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

示例

示例 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 表示一个有效的表达式
  • ‘+’ 不能用作一元运算(例如, “+1” 和 “+(2 + 3)” 无效)
  • ‘-’ 可以用作一元运算(即 “-1” 和 “-(2 + 3)” 是有效的)
  • 输入中不存在两个连续的操作符
  • 每个数字和运行的计算将适合于一个有符号的 32位 整数

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/basic-calculator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. case

class Solution:
    def calculate(self, s: str) -> int:
    	# 管理括号内符号变化
        ops = [1]
    	# 管理正负符号
        sign = 1
        # 统计答案
        res = 0
        # 遍历索引
        i = 0
        while i < len(s):
        	# 遇到空格跳过
            if s[i] == ' ':
                i += 1
            # 遇到加号根据ops判断是否需要变化
            elif s[i] == "+":
                sign = ops[-1]
                i += 1
            # 遇到减号同上判断
            elif s[i] == "-":
                sign = -ops[-1]
                i += 1
            # 遇到括号则将括号前的sign添加到ops
            elif s[i] == "(":
                ops.append(sign)
                i += 1
            # 括号结束,符号变化结束
            elif s[i] == ")":
                ops.pop()
                i += 1
            # 其他情况为数字统计
            else:
                num = 0
                # 需要判断是否多位,ord转换字符为数字
                while i < len(s) and s[i].isdigit():
                    num = num*10 + ord(s[i])-ord('0')
                    i+=1
                res += num*sign
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值