题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
package main import ( "unicode" ) /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ func solve(s string) int { stack := []int{} var num int var sign byte = '+' for i := 0; i < len(s); i++ { c := s[i] if unicode.IsDigit(rune(c)) { num = num*10 + int(c-'0') } if c == '(' { // 找到对应的闭括号,并递归计算括号内的表达式 j := i counter := 0 for ; j < len(s); j++ { if s[j] == '(' { counter++ } else if s[j] == ')' { counter-- if counter == 0 { break } } } num = solve(s[i+1 : j]) i = j } if i == len(s)-1 || c == '+' || c == '-' || c == '*' { switch sign { case '+': stack = append(stack, num) case '-': stack = append(stack, -num) case '*': top := stack[len(stack)-1] stack = stack[:len(stack)-1] stack = append(stack, top*num) } sign = c num = 0 } } var result int for _, v := range stack { result += v } return result }