问题描述:给出4个1-13的数字,通过加减乘除,得到数字为24就算胜利
    输入:
    4个1-13的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。
    输出:
    true or false
    题目来源:牛客华为

    网上很多都是考虑各种情况的详尽暴力算法,极度不符合美学,而且稍有不注意,就会少考虑情况导致出错。

    首先附上一个典型的暴力算法CSDN
    可以不用看,我也没看明白,大概就是考虑所有情况并枚举计算

    然后附上一个典型错误解答,来源华为牛客。
    image.png
    这是十分典型的错误,因为没考虑括号的存在,比如(ab)+(cd)的存在,他这种计算方法无法计算出一些情况。
    比如(5*5)-(5/5)=24,而他这个算法给出结果是false。

    我的方法
    遍历递归。每次取出两个值,运算,然后再放回去。然后再从这里面取出两个值,运算,在放回去,直到得到唯一的一个结果,判断是否是24
    例如:
    a b c d
    取出a b 运算所有可能
    其中一种 ab c d
    选择其中两个,这里就可能选择a
    b 与其他或者c d
    解决了括号的问题
    这个就是符合我思路的代码:CSDN

    数学解答
    完成了去重、优化运算提升效率的方法