在 JavaScript 中从数组中查找所有可能的组合

javascriptweb developmentfront end technologyobject oriented programming

在给定的问题陈述中,我们被要求借助 JavaScript 功能从数组中查找所有可能的组合。因此,我们将使用一个空数组并将所有可能的组合添加到此数组中。

上述问题的逻辑

在 JavaScript 中从数组中查找可能的组合的最简单方法是使用 for 循环将组合添加到创建的新数组中。

为了理解此实现的逻辑,我们将通过迭代输入数组来工作,对于每个元素,我们将通过将该项目添加到每个现有组合来创建一个新组合。此过程将通过迭代当前组合列表并创建一个由当前组合和添加到末尾的新元素组成的新组合来完成。然后,将这个新创建的组合添加到结果数组的末尾。

例如,我们有输入数组 arr = [1, 2, 3]。

我们将从一个空数组开始作为我们的初始组合列表。然后,我们将遍历 arr 中的每个元素,对于每个项目,我们将遍历当前组合列表并添加该元素以创建新的组合。

对于 num = 3,可能的组合是:[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

对于 num = 4,可能的组合是:[ 4 ], [ 1, 4 ], [ 2, 4 ], [ 1, 2, 4 ], [ 3, 4 ], [ 1, 3, 4 ], [ 2, 3, 4 ], [ 1, 2, 3, 4 ]

算法

步骤 1 − 任务是从数组中找到组合并将它们添加到新的子数组中。为了处理这个概念,我们将定义一个函数并将其命名为possibleCombination,并带有一个参数arr。

步骤2− 在下一行中声明一个空的子数组并将其命名为result。此数组将保存输入数组的结果潜在组合。

步骤3− 创建一个for循环来循环遍历数组的元素并将结果的长度存储在len变量中。

步骤4− 继续第三步,构建另一个for循环,用于组合输入部分。

步骤5− 显示所有可能组合的结果。

示例 

// 定义函数以返回可能的组合
function posibleCombination(arr) { 
    const result = [[]];
    for (let num of arr) { 
      const len = result.length;
      for (let i = 0; i < len; i++) {
        const temp = result[i].slice();
        temp.push(num);
        result.push(temp);
      }
    }
    return result;
  }
  // 打印输入数组并输出组合
  const arr = [1, 2, 3];
  console.log(posibleCombination(arr));

输出

[
  [],       [ 1 ],
  [ 2 ],    [ 1, 2 ],
  [ 3 ],    [ 1, 3 ],
  [ 2, 3 ], [ 1, 2, 3 ]
]

因此我们可以看到上述组合:

对于 num = 1,有 2 种可能的组合 [] 和 [1]

对于 num = 2,有 4 种可能的组合 []、[1]、[2] 和 [1, 2]。

对于 num = 3,有 8 种可能的组合 []、[1]、[2]、[1, 2]、[3]、[1, 3]、[2, 3] 和 [1, 2, 3]

我们可以在这里看到,对于数值 1,有 2 种可能的组合。对于数字 2,有 4 种可能的组合,对于数字 3,有 8 种可能的组合。

时间复杂度

现在是时候计算上述算法的时间复杂度了。对于我们的代码,时间复杂度将是 O(2^n)。这里 n 表示数组的大小。这是因为数组中每个项目的备选组合数是两倍。输入数组长度为 n,输出的总组合数为 2^n。

结论

在此代码中,可能的组合取决于输入数组。如果输入数组很大,则进行组合所需的时间将高于预期。因此,我们可以根据需要在未来对其进行优化。


相关文章