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
时间复杂度:O(n) 空间复杂度:O(n)
时间复杂度:O() 空间复杂度:O()
时间复杂度:O(m+1) 空间复杂度:O(1)
Last updated