问题描述:给出4个1-13的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-13的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。
输出:
true or false
题目来源:牛客华为
网上很多都是考虑各种情况的详尽暴力算法,极度不符合美学,而且稍有不注意,就会少考虑情况导致出错。
首先附上一个典型的暴力算法:CSDN
可以不用看,我也没看明白,大概就是考虑所有情况并枚举计算
然后附上一个典型错误解答,来源华为牛客。
这是十分典型的错误,因为没考虑括号的存在,比如(ab)+(cd)的存在,他这种计算方法无法计算出一些情况。
比如(5*5)-(5/5)=24,而他这个算法给出结果是false。
我的方法
遍历递归。每次取出两个值,运算,然后再放回去。然后再从这里面取出两个值,运算,在放回去,直到得到唯一的一个结果,判断是否是24
例如:
a b c d
取出a b 运算所有可能
其中一种 ab c d
选择其中两个,这里就可能选择ab 与其他或者c d
解决了括号的问题
这个就是符合我思路的代码:CSDN
数学解答
完成了去重、优化运算提升效率的方法
