Leetcode 224 Solution
This article provides solution to leetcode question 224 (basic-calculator)
Access this page by simply typing in "lcs 224" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/basic-calculator
Solution
class Solution:
def calculate(self, s: str) -> int:
def get_next_token(s, i):
while i < len(s) and s[i] == ' ':
i += 1
if i == len(s):
return None, i
if s[i] in ['+', '-', '(', ')']:
return s[i], i + 1
j = i
while j < len(s):
if not s[j].isnumeric():
break
j += 1
return int(s[i:j]), j
i = 0
def evaluate(s):
nonlocal i
if i == len(s):
return 0
nums = []
last_sign = '+'
while i < len(s):
token, i = get_next_token(s, i)
if token == '+':
last_sign = '+'
elif token == '-':
last_sign = '-'
elif isinstance(token, int):
nums.append(token if last_sign == '+' else -token)
elif token == '(':
child_val = evaluate(s)
nums.append(child_val if last_sign == '+' else -child_val)
elif token == ')':
break
elif token is None:
break
else:
raise Exception("Unexpected token '{}'".format(token))
return sum(nums)
return evaluate(s)