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 []intfor 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 intif tmpC == "+" {addNum = leftNum + rightNum} else if tmpC == "-" {addNum = leftNum - rightNum} else {addNum = leftNum * rightNum}res = append(res, addNum)}}}}return res
}