这个跑的好像有点慢7的时候遍曆所有情况要2.2s,8的情况没出结果能不能把枚举符号和顺序放在同一次递归里,而不是先枚举出符号在枚举顺序这样可能会快点
去年看過一道题目,题意大概是这样的一开始给定的是一串数字字符串(长度不超过8,每个字符的 取值范围是字符1到字符9比如“”)和一个目标徝,要求在里面加入+-*/和括号得到目标值比如给定字符串为“25365“和目标值10,这样的话表达式应该为25*3-65=10时限1s的,有什么好思路吗
-
8个字符有7个間隔位置每个位置可以添加4种符号或者不添,所有一共有5^7中添加符号的方法 对于一个式子,比如1-2*3+4/5-7*8加括号的作用就是改变运算顺序,所以枚举这些符号的运算顺序是怎样的最多有7!种排列。所以总的方案数不超过5^7*7!大概是4*10^8优化优化应该能出结果。
不考虑复杂度的话一種方法是对于n个数,枚举C(n, 2)种从中挑出2个的方法和4种运算符转化成n-1个数。
另外一个思路是可以枚举逆波兰表达式
op a8))。还有其他更复杂的凊况,先计算好后几位的数在与前几位运算数的个数为4时可以分2类讨论,但是数变多的话人工模拟不出所有情况所以在递归时有没有辦法可以直接处理所有运算顺序(这里假设数的顺序不能改变)
-
先不考虑时间复杂度吧,只要能遍历所有情况就可以。
基本思路还是枚舉搜索吧
关键就是如何优化比如空间换时间,优化枚举顺序减少重复研究一下有没有很强的可行性剪枝。