2017-04-11 70 views
1

我给数n和X不同的号码获得N,我应该找出如果我可以使用+-。什么算法得到给定数字n我应该使用?例如,
算法,看看我是否可以从给定的数字

Input Output n=10 . 15+25-30=10 15 25 30

+0

你的数据集有多大?如果太大,您可能不得不使用启发式方法来保证成功,只有很好的概率... – gdelab

+0

您尝试过什么?这不是免费的编码服务。你如何手动执行此操作?你可能想从一个小案子开始,然后建立一个数量不同的数字输入。 – Zac

回答

2

你可以动态地做到这一点。迭代给定的数字并存储这些值,这些值可以通过取前一个结果并添加/减去当前数字来实现。在您的例子这将是:

  • {0}
  • {-15,15}
  • {-40,10,-10,40}
  • {-70,-10, -20,40,-40,20,10,70}

最后,只要检查你的值是否在最后一组。它看起来像指数算法(每个迭代的设置大小加倍),尽管数字很快重复。另外,您实际上只能存储正值。

+0

根据问题陈述,他可能无法删除负值(可能接受10-15 + 30表格的解决方案,他们不应该这样做) – gdelab

+0

您也可以加快它的速度一些情况(并非全部)通过预先计算总和S [i]从结尾到任何给定的索引i。在@ kmichael08算法的第i次迭代中,当你在S [i]之下或者在-S [i]之下时,你可以从你的可能列表中删除这个数字。 – gdelab

+0

@gdelab我想过不重复值,该集合在每一步都是对称的,所以你可以在更新时记住它,而不是实际保留这些值。如果你可以计算x,那么也可以-x(否定一切)。 – kmichael08

相关问题