import (
"fmt"
"strconv"
)
func diffWaysToCompute(input string) []int {
// 如果是数字,直接返回
if isDigit(input) {
tmp, _ := strconv.Atoi(input)
return []int{tmp}
}
// 空切片
var res []int
// 遍历字符串
for index, c := range input {
tmpC := string(c)
if tmpC == "+" || tmpC == "-" || tmpC == "*" {
// 如果是运算符,则计算左右两边的算式
// 获取运算符左右两边的数
left := diffWaysToCompute(input[:index])
right := diffWaysToCompute(input[index+1:])
// 进行算数运算
for _, leftNum := range left {
for _, rightNum := range right {
var addNum int
if tmpC == "+" {
addNum = leftNum + rightNum
} else if tmpC == "-" {
addNum = leftNum - rightNum
} else {
addNum = leftNum * rightNum
}
// 将当前层级的运算结果返回
res = append(res, addNum)
}
}
}
}
return res
}
// 判断是否为全数字
func isDigit(input string) bool {
_, err := strconv.Atoi(input)
if err != nil {
return false
}
return true
}
go语言刷题:241. 为运算表达式设计优先级
于 2021-07-18 11:46:24 首次发布