从数组中找出 N 个数,其和为 M 的所有可能

128 阅读1分钟

示例 [1,2,3,4,5] 获取和为7的数组。[[2,5], [3, 4]]

给定数组 [1,5,3,2,8,11,4,10,9,15,13,17,20,7,12]
其和为20
假设函数getIndexsum

    function getIndexsum (arr, sum) {
        let _set = new Set(); //索引下表的set数据
        let iArr = []; //最后return的数组
        arr.map((val, i) => {
            const c = sum - val; //获取差值
            const _i = arr.indexOf(c); //差值是否在arr数组中
            // 差值存在  且set数据没有存储过  切两个数据索引不相同
            if(_i > -1 && !_set.has(i) && _i != i){
                _set.add(i); //存储当前的下标
                _set.add(_i); // 存储它的差值对应的下标
                iArr.push([val, c]); //iArr 内部存储
            }

        });
     return iArr;
    };

运行结果

image.png

注意这里没有做数组重复的处理