【问题标题】:Find X number exist inside array of n sum or not [duplicate]查找X个数是否存在于n个总和的数组中[重复]
【发布时间】:2019-05-27 02:41:50
【问题描述】:

我想找到下面给定的数组中是否存在 x 数。为了在里面找到 x 数,数组的任何元素都可以给定 x 数。这是基于元素有一个内部数组并检查它是否存在。这不像是推广和组合。

let arrr = [
    4,
    7,
    6,
    2,
    7,
    6
];
  • 示例:如果 X=16,则结果应为 [4,6,6] = 16 (true)
  • 示例: 如果 X=11 那么结果应该是 [4,7] = 11 (true)
  • 示例:如果 X=18 那么结果应该是 [4,6,6,2] = 18 (true)

【问题讨论】:

  • 对于X = 16,您可以得到满足条件的下一个结果:[7,7,2][4,6,6],您有什么理由更喜欢[4,6,6] 或任何结果都可以吗?另外,你有没有尝试过?在这种情况下,请将其添加到问题中。
  • 是 -> 任何结果都可以。我试过但没有工作for(let i=0; i<arrr.length; i++) { temp = arrr[i] for(let j=i+1; j<arrr.length; j++) { temp += arrr[j] if(sum > temp) { console.log("match", temp) } } }
  • 另外,我想知道实现给定算法的最佳方法
  • 您的问题是另一个问题的简单版本。只需简单的修改,您的问题就解决了。

标签: javascript algorithm


【解决方案1】:

它没有经过优化,但它可以工作:

    function Contains(array, value) {
        const str = array.reduce((p, c) => p + c.toString(), "");
        const fn = function (active, rest, a) {
            const sum = rest.split("").reduce((p, c) => p + Number(c), 0);
            if (sum === value) return true;
            if (!active && !rest) return;
            if (!rest) {
                a.push(active);
            } else {
                if (fn(active + rest[0], rest.slice(1), a) === true) return true;
                if (fn(active, rest.slice(1), a) === true) return true;
            }
            return a;
        }
        const result = fn("", str, []) === true;
        return result === true;
    }
    Contains(array, value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-29
    • 2018-07-31
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多