给定由数字组成的字符串,添加+或 - 符号以使表达式值为0.返回表达式。
例如,
123 => 1 + 2 -3 = 0
173956 => 17 + 39 - 56 = 0
除了蛮力的方式,我没有解决这个问题的线索。
有什么建议吗?
答案 0 :(得分:1)
这是一个搜索问题。必须在解决方案空间中执行搜索。 假设我们从'123'字符串开始,此时,我们可以在'1'之后添加+或 - 符号,结果我们得到'1 + 23'或'1 - 23'。通过在下一个字符后添加符号,可以进一步拆分每个变体。因此,所有可能的符号添加将形成树状结构 - 解决方案空间。您的算法必须在此结构中搜索解决方案。我认为A *可以用来做到这一点。
Anders K绘制解决方案空间的漂亮ASCII图,您只需要搜索解决方案。简单广度优先搜索或深度优先搜索可以完成工作,但我认为如果解决方案空间很大,它将会很慢。
此外,我认为可以找到利用解决方案空间属性的更优化,特定的解决方案,例如 - 它是树状结构。
答案 1 :(得分:0)
你可以通过多种方式解决它,例如使用递归方法,如果你将它构造成一棵树就会变得很明显
e.g。 123
因为在数字(+|-)
之后可能有两个不同的符号:
1
/ \
+ -
/ \
2 2
/ \ / \
+ - + -
| | | |
3 3 3 3