题解 | #表达式求值#

表达式求值

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
}

全部评论

相关推荐

01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务