题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
func solve(s string) int {
cal := func(ops []int, nums []int) int {
if len(nums) <= 0 {
return 0
}
newOps := make([]int, 0)
newNums := make([]int, 0)
newNums = append(newNums, nums[0])
for i := 0; i < len(ops); i++ {
if ops[i] == 2 {
nums[i+1] = nums[i] * nums[i+1]
newNums[len(newNums)-1] = nums[i+1]
} else {
newOps = append(newOps, ops[i])
newNums = append(newNums, nums[i+1])
}
}
for i := 0; i < len(newOps); i++ {
if newOps[i] == 0 {
newNums[i+1] = newNums[i] + newNums[i+1]
} else {
newNums[i+1] = newNums[i] - newNums[i+1]
}
}
return newNums[len(newNums)-1]
}
var dfs func(ss string, st int, en int) (int, int)
dfs = func(ss string, st int, en int) (int, int) {
ops := make([]int, 0)
nums := make([]int, 0)
curV := 0
hasV := false
for i := st; i <= en; {
if ss[i] >= '0' && ss[i] <= '9' {
curV = curV*10 + int(ss[i]) - '0'
hasV = true
} else {
if ss[i] == '(' {
val, next := dfs(ss, i+1, en)
nums = append(nums, val)
i = next
continue
} else if ss[i] == ')' {
if hasV {
nums = append(nums, curV)
}
return cal(ops, nums), i + 1
} else {
if hasV {
nums = append(nums, curV)
}
op := 0
if ss[i] == '+' {
op = 0
} else if ss[i] == '-' {
op = 1
} else {
op = 2
}
ops = append(ops, op)
curV = 0
hasV = false
}
}
i++
}
if hasV {
nums = append(nums, curV)
}
return cal(ops, nums), en + 1
}
res, _ := dfs(s, 0, len(s)-1)
return res
// write code here
}

