Leetcode 224 Solution

This article provides solution to leetcode question 224 (basic-calculator)

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)