| 123456789101112131415161718192021222324252627282930313233 | import (	"strconv")var m map[string][]int = make(map[string][]int)func diffWaysToCompute(input string) (ans []int) {	if _, ok := m[input]; ok {		return m[input]	}	for i := range input { // Divide and conquer, use every operator to split input into 2 smaller sub-problems.		if ch := input[i]; ch == '+' || ch == '-' || ch == '*' {			for _, l := range diffWaysToCompute(input[:i]) {				for _, r := range diffWaysToCompute(input[i+1:]) {					if ch == '+' {						ans = append(ans, l+r)					} else if ch == '-' {						ans = append(ans, l-r)					} else {						ans = append(ans, l*r)					}				}			}		}	}	if len(ans) == 0 { // No operator, just a number		n, _ := strconv.Atoi(input)		ans = append(ans, n)	}	m[input] = ans	return}
 |