* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
function solve( s ) {//递归会出现深浅拷贝的问题,每次重新调用所有同名变量将改变
// write code here
let stack=[]
let sign='+'
let i=0
let num=0
while(i<s.length){
if(s[i]=='('){
let flag=1,star=i+1
while(flag>0){
i++;
if(s[i]=='('){flag++;}
if(s[i]==')'){flag--;}
}
let end=i
let arr=s.slice(star,i)
num=solve(arr)//
i=end
}
else if(s[i]>='0'&&s[i]<='9'){
num=num*10+Number(s[i])
}
if(s[i]<'0'||s[i]>'9'||i==s.length-1){
//if(i==s.length-1){stack.push(num);}
if(sign=='+'){stack.push(num);}
if(sign=='-'){stack.push(num*(-1));}
if(sign=='*'){stack.push(stack.pop()*num);}
sign=s[i]
num=0
}
i++;
}
return stack.reduce(function(a,b){
return a+b;
})
}
module.exports = {
solve : solve
};