Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
idx=1;flag=0;tmp=0
ans=0
ret=[0 for i in range(len(s))]
last_idx=[1 for i in range(len(s))]
count=0
for i in range(len(s)):
if s[i]=='(':
ret[count]+=ans+tmp
last_idx[count]=idx
idx=1
ans,tmp=0,0
count+=1
elif s[i]==')':
count-=1
ret[count]+=last_idx[count]*(ans+tmp+ret[count+1])
ret[count+1]=0
ans,tmp=0,0
elif s[i]==' ' or s[i]=='+' or s[i]=='-':
ans+=tmp;tmp=0;flag=0
if s[i]==' ':
pass
else:
idx=44-ord(s[i])
else:
if flag==1:
tmp=tmp*10+int(s[i])*idx
else:
tmp+=int(s[i])*idx
flag=1
return ret[0]+ans+tmp