美文网首页
Leetcode_224_基本计算器_hn

Leetcode_224_基本计算器_hn

作者: 1只特立独行的猪 | 来源:发表于2020-03-17 14:18 被阅读0次

    题目描述

    实现一个基本的计算器来计算一个简单的字符串表达式的值。
    字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。

    示例

    示例 1:

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

    示例2:

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

    示例3:

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

    说明

    • 你可以假设所给定的表达式都是有效的。
    • 请不要使用内置的库函数 eval。

    解答方法

    方法一:栈和不反转字符串

    思路

    • 把字符串中所有的数字和数字前面的符号看做一个整体,以正负数的形式表达,这样在计算时全看做加法。
    • 遇到括号时先保存之前的计算结果,计算完括号里的之后在于之前的结果相加。
    • 结果的保存用栈来实现

    代码

    class Solution:
        def calculate(self, s: str) -> int:
            stack = []
            res = 0
            nums = 0
            sign = 1
            for ch in s:
                if ch.isdigit():
                    nums = nums*10 + int(ch)
                
                if ch is '+':
                    res += sign * nums
                    sign = 1
                    nums = 0
                
                if ch is '-':
                    res += sign * nums
                    sign = -1
                    nums = 0
                
                if ch is '(':
                    stack.append(res)
                    stack.append(sign)
                    sign = 1
                    res = 0
    
                if ch is ')':
                    res += sign * nums
                    res *= stack.pop()
                    res += stack.pop()
                    nums = 0
    
            return res + sign*nums
    
    

    时间复杂度

    O(N),其中 N 指的是字符串的长度。

    空间复杂度

    O(N),其中 N 指的是字符串的长度。

    相关文章

      网友评论

          本文标题:Leetcode_224_基本计算器_hn

          本文链接:https://www.haomeiwen.com/subject/povgehtx.html