2017-04-11 23 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

相關問題