241. 为运算表达式设计优先级
题目描述:
给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以按任意顺序 返回答案。
考察重点:(递归分治) 以符号位分割为左右两部分,得到所有可能组合结果
func isDigit(input string) bool {
_, err := strconv.Atoi(input)
return err == nil
}
func DiffWaysToCompute(expression string) []int {
if isDigit(expression) {
tmp, _ := strconv.Atoi(expression)
return []int{tmp}
}
var res []int
for index, c := range expression {
tmpC := string(c)
if tmpC == "+" || tmpC == "-" || tmpC == "*" { //每个递归,都会遍历所有符号位,对符号位两边进行相加并将结果加入res数组
left := DiffWaysToCompute(expression[:index])
right := DiffWaysToCompute(expression[index+1:])
for _, leftNum := range left { //左侧共有len(left)种结果,右侧共有len(right)种结果,将其组合得到所有组合结果
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
}