这是在接受采访时向我询问的,
Given a list of integer numbers, a list of symbols [+,-,*,/] and a target number N,
provide an expression which evaluates to N or return False if that is not possible.
e.g. let the list of numbers be [1,5,5] and the target number is 9, one possible
solution could be 5+5-1.
现在,我的解决方案是一个强制递归解决方案,它贯穿所有可能的数字和所有可能的操作,并且当数字超过N或等于N时递归终止。
这让我想知道是否有更好,更精致的解决方案。有什么想法吗?我正在考虑某种表达树的反向构造。
答案 0 :(得分:4)
我要继续说这个面试问题不仅仅是试图通过提问来缩小问题范围。
有一个非常大的问题清单,你没有涉及这个问题对解决方案很重要我注意到的一个问题是,如果除法通过舍入工作,并且您在运算符列表中有+
和/
,则可以始终除以直到它舍入为1然后只添加。此外,如果您可以重复乘法基本上是无关紧要的,因为它可以被许多添加替换。
我确信你的面试官希望你提出更多澄清问题的原因是因为即便是我想到的一小部分问题也会在很大程度上改变这个问题。
最后要考虑的是,这个问题是背包问题的超集,已经知道是np-complete,所以显然没有多项式时间解决方案。