給定陣列,試求能否從陣列中取出n個不復用的數的和為sum
阿新 • • 發佈:2019-02-11
這是之前在一次面試中遇到的一道題,當時因為太久沒擼演算法,太久沒刷題,所以gg,現在回顧一下。
問題描述:
實現一個函式,傳3個引數,指定陣列(有小數、正負數),n(取出個數),sum(指定和),輸出是否能找到這幾個數。
這和經典的湊硬幣問題其實本質上是相同的,自然可以用動態規劃來做,但這裡我們先考慮用深度搜索來做做。
關鍵就是這些邊界的選擇設定,我在這裡也調了很久,這還是得多練,熟能生巧
邊界條件:
- sum=0&n=0,成功get;
- n<=0,這條路徑跪了;
- n>0,繼續搜尋->>>
因為陣列中有正有負,所以sum只能用於最後的滿足判斷
處理關鍵
完整程式碼如下:成功返回true,失敗返回false
function findGroup(arr,n,sum){
if(sum == 0 && n == 0){
return true;
}else if(n <= 0){
return false;
}
if(n > 0)
for(var i = 0; i < arr.length; i++){
var temp = arr. slice(i+1,arr.length);
return findGroup(temp,n-1,sum-arr[i]) || findGroup(temp,n,sum);
}
}
未完…(看演算法真是又爽又痛苦,關鍵是理解)