
数据组合求值算法挑战
方法一:
var pairwise=(function() {
var res=[]; //放序号的缓存
function judge(arr,val){
for(let a of arr){
if( a==val ){
return true;
}
}
return false;
}
function fn(n,arr,arg){ //递归函数
for(let i=n,l=arr.length;i<l;i++){
if( judge(res,i) || judge(res,n) ){
continue;
}
if( n!=i && arr[n]+arr[i]==arg ){
res=res.concat(n,i);
break;
}
}
if( n!=arr.length-1 ){
fn(n+1,arr,arg);
}
}
return function(arr, arg){
res=[];
if( arr.length==0 ){
return 0;
}
fn(0,arr,arg);
return res.reduce(function(a,b){
return a+b;
});
};
})();
pairwise([1, 1, 1], 2);
方法二:
function pairwise(arr, arg) {
var len = arr.length,
r = 0,
cArr = [];
for (var i = 0; i < len; i++) {
for (var j = i + 1; j < len; j++) {
if (arr[i] + arr[j] === arg && i !== j && !(cArr.indexOf(i) > 0 || cArr.indexOf(j) > 0)) {
r = r + i + j;
cArr.push(i);
cArr.push(j);
break;
}
}
}
return r;
}
pairwise([1,4,2,3,0,5], 7);