JavaScript実装配列から選択された固定値と等しいn個の数

1914 ワード

現実の問題は、このようなデータモデルに抽象化される可能性があります.
1つの配列から数を選択し、指定した値に加算します.
多くの読者はネット通販の経験があるはずです.ネット通販には一般的にコンパクトな機能があります.もし読者が70元の商品を買ったとしても、100元を満たさなければ郵送できません.この時、システムは自動的にいくつかの商品を推薦して、合わせて100元になります.
システムはどのようにどのような商品を推薦するかを確定しますか?これは実はさっき言ったモデルで、私たちはヒット商品の価格を1つの配列に置くことができて、それからアルゴリズムを利用して、配列の中でどの価格の和が30元であるかを見つけることができます.
くだらないことは言わないで、おかずはみんなにJavaScriptバージョンのアルゴリズムの実現を分かち合います.
アルゴリズムコード:

function getCombBySum(array,sum,tolerance,targetCount){
var util = {
/*
get combination from array
arr: target array
num: combination item length
return: one array that contain combination arrays
*/
getCombination: function(arr, num) {
var r=[];
(function f(t,a,n)
{
if (n==0)
{
return r.push(t);
}
for (var i=0,l=a.length; i<=l-n; i++)
{
f(t.concat(a[i]), a.slice(i+1), n-1);
}
})([],arr,num);
return r;
},
//take array index to a array
getArrayIndex: function(array) {
var i = 0,
r = [];
for(i = 0;i 
 

呼び出し説明:array:データソース配列.必須.
sum:加算された和.必須.
tolerance:許容差.このパラメータを指定しない場合は、加算された合計はsumパラメータに等しくなければなりません.このパラメータを指定すると、結果を許容範囲内でフローティングできます.オプション.
targetCount:オペランド数.このパラメータを指定しない場合、結果にはすべての可能性が含まれます.このパラメータを指定すると、固定数の加算をフィルタできます.3を指定すると、結果は3つの数の加算のみが含まれます.オプション.
戻り値:戻り値は配列スリーブ配列構造であり、内層配列の要素はオペランドであり、外層配列の要素はすべての可能な結果である.