224. Basic Calculator

https://leetcode.com/problems/basic-calculator/

solution

class Solution:
    def calculate(self, s: str) -> int:
        stack= []
        res = 0
        sign = 1
        i = 0
        while i < len(s):  # 使用while是因为遇到数字本该计算 res += sign * num, 但num可能是多位数字
            if s[i].isdigit():
                tmp = int(s[i])
                i += 1
                while i < len(s) and s[i].isdigit():
                    tmp = tmp * 10 + int(s[i])
                    i += 1
                res += sign * tmp  # 没有括号的加减通过sign在这里实现
            elif s[i] == '+':
                sign = 1
                i += 1
            elif s[i] == '-':
                sign = -1
                i += 1
            elif s[i] == '(':
                stack.append(res)
                stack.append(sign)
                res, sign = 0, 1
                i += 1
            elif s[i] == ')':
                res *= stack.pop()  # 符号, 和decoder string一样保存多信息在stack
                res += stack.pop()  # 数字
                i += 1
            else:  # 字符串,总会遇到空格等其他问题字符
                i += 1
        return res

时间复杂度:O(n) 空间复杂度:O(n)

follow-up

227. Basic Calculator II

时间复杂度:O(n) 空间复杂度:O(n)

* 772. Basic Calculator III

时间复杂度:O() 空间复杂度:O()

*408. Valid Word Abbreviation

时间复杂度:O(m+1) 空间复杂度:O(1)

Last updated