Algorithm 添加+;/-使数值字符串在0中求值的步骤
给定一个由数字组成的字符串,添加+或-符号使表达式值为0。返回表达式 比如说, 123=>1+2-3=0 173956=>17+39-56=0 我没有任何线索来解决这个问题,除了暴力的方式Algorithm 添加+;/-使数值字符串在0中求值的步骤,algorithm,Algorithm,给定一个由数字组成的字符串,添加+或-符号使表达式值为0。返回表达式 比如说, 123=>1+2-3=0 173956=>17+39-56=0 我没有任何线索来解决这个问题,除了暴力的方式 有什么建议吗?你可以用很多方法来解决它,例如使用递归方法,如果你把它组织成一棵树,这种方法会变得很明显 e、 g.123 由于一个数字后面可以有两个不同的符号(+|-): 1 / \ + - / \ 2 2 / \
有什么建议吗?你可以用很多方法来解决它,例如使用递归方法,如果你把它组织成一棵树,这种方法会变得很明显 e、 g.123 由于一个数字后面可以有两个不同的符号
(+|-)
:
1
/ \
+ -
/ \
2 2
/ \ / \
+ - + -
| | | |
3 3 3 3
你可以用很多方法来解决它,例如使用递归方法,如果你把它构造成一棵树的话,这种方法会变得很明显 e、 g.123 由于一个数字后面可以有两个不同的符号
(+|-)
:
1
/ \
+ -
/ \
2 2
/ \ / \
+ - + -
| | | |
3 3 3 3
这是一个搜索问题。必须在解决方案空间中执行搜索。 假设我们从“123”字符串开始,在这一点上,我们可以在“1”之后添加+或-符号,结果得到“1+23”或“1-23”。通过在下一个字符后添加符号,可以进一步拆分每个变体。因此,所有可能的符号添加将形成树状结构-解决方案空间。您的算法必须在此结构中搜索解决方案。我想A*可以用来做这个 画出解决方案空间的漂亮的ASCII图,你们只需要搜索它的解决方案。简单的广度优先搜索或深度优先搜索可以完成这项工作,但我认为如果解决方案空间很大,速度会很慢
此外,我认为可以利用解决方案空间的特性找到更优化、更具体的解决方案,例如,它是树状结构 这是一个搜索问题。必须在解决方案空间中执行搜索。 假设我们从“123”字符串开始,在这一点上,我们可以在“1”之后添加+或-符号,结果得到“1+23”或“1-23”。通过在下一个字符后添加符号,可以进一步拆分每个变体。因此,所有可能的符号添加将形成树状结构-解决方案空间。您的算法必须在此结构中搜索解决方案。我想A*可以用来做这个 画出解决方案空间的漂亮的ASCII图,你们只需要搜索它的解决方案。简单的广度优先搜索或深度优先搜索可以完成这项工作,但我认为如果解决方案空间很大,速度会很慢
此外,我认为可以利用解决方案空间的特性找到更优化、更具体的解决方案,例如,它是树状结构 问这个问题可能会更好。你有没有看动态规划来解决这个问题?我尝试过动态规划,但要得到一个最优的子结构有点困难。你可以通过使用偶数/奇数测试(首先将所有数字除以它们的gcd)来减少一些可能性。最后的奇数位数一定是偶数。也许问这个问题会更好。你有没有看动态规划来解决这个问题?我尝试过动态规划,但要得到一个最优的子结构有点困难。你可以通过使用偶数/奇数测试来减少一些可能性(首先将所有位数除以它们的gcd)。最后的奇数位数一定是偶数。谢谢,但我认为Anders K遗漏了一个分支,(+|-| concat),对吗?是的,如果是这种情况,解空间将是一个图。谢谢,但我认为Anders K遗漏了一个分支,(+|-| concat),对吗?是的,如果是这种情况,解空间将是一个图。