最直接的思路就是穷举。
4 个数,加减乘除四个运算符,做穷举,这个是很简单的事:四个数的全排列,四个运算符选三个的全排列。
关键是加括号怎么穷举。那么加括号的核心是啥呢?其实,加括号就是整数拆分!
1 = 1
2 = 1 + 1
3 = 1 + 1 + 1
= 1 + 2
= 2 + 1
4 = 1 + 1 + 1 + 1
= 1 + 1 + 2
= 1 + 2 + 1
= 2 + 1 + 1
= 1 + 3
= 3 + 1
以上是 4 以内的整数的拆分结果。
然后,对于运算式中所有大于 1 的运算数,递归做整数拆分,并且在拆分结果上加括号,直到所有的运算数都为 1 为止。
因此,4 的拆分结果如下:
4 = 1 + 1 + 1 + 1
= 1 + 1 + (1 + 1)
= 1 + (1 + 1) + 1
= (1 + 1) + 1 + 1
= 1 + (1 + 1 + 1)
= 1 + (1 + (1 + 1))
= 1 + ((1 + 1) + 1)
= (1 + 1 + 1) + 1
= (1 + (1 + 1)) + 1
= ((1 + 1) + 1) + 1
一共有 10 种加括号的形式(不加括号也算一种)。
另外,由于 4 个数字可能有相等的,用以上方式穷举出的结果会有重复,需要去重。
再考虑到运算符的交换律、结合律,导致一些括号加了没有意义,这可以用规则做简化。
以上。思路已提供,程序实现略。