前提:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
网上看了挺多方法,但是都不考虑到当一个数组内有重复值的时候,其实还是会有重复利用元素的可能性的。
解题思路:
递归+做减法。
let indexArray = [];
var twoSum = function (arr, target) {
if(arr.length >= 2){
arr.map((num, indexNum) => {
arr.splice(indexNum, 1, NaN);
arr.map((item, indexItem) => {
if((num + item) == target){
arr.splice(indexItem, 1, NaN);
indexArray.push([indexNum, indexItem]);
arguments.callee(arr, target);
}
})
})
if(indexArray.length > 0){
return indexArray;
}else{
return '数组内不存在相加为' + target + '的两个元素';
}
}else{
return '传入的数组长度小于2';
}
};
console.log(twoSum([2, 7, 1, 8, 4, 5, 3, 6], 9));
/*
返回结果如下
[ [ 0, 1 ], [ 2, 3 ], [ 4, 5 ], [ 6, 7 ] ]
*/