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 .
Example 1:
Input: “1 + 1”
Output: 2
Example 2:
Input: " 2-1 + 2 "
Output: 3
Example 3:
Input: “(1+(4+5+2)-3)+(6+8)”
Output: 23
Note:
You may assume that the given expression is always valid.
Do not use the eval built-in library function.
func calculate(s string) int {
res, curr, sign := 0, 0, 1
st := []int{}
for i, v := range s {
if unicode.IsDigit(v) {
curr = curr*10 + int(s[i]-'0')
} else if s[i] == '+' || s[i] == '-' {
res += sign * curr
curr = 0
sign = 1
if s[i] == '-' {
sign = -1
}
} else if s[i] == '(' {
st = append(append(st, res), sign)
res = 0
sign = 1
} else if s[i] == ')' {
res += sign * curr
curr = 0
res *= st[len(st)-1]
res += st[len(st)-2]
st = st[:len(st)-2]
}
fmt.Println(res)
}
res += sign * curr
return res
}