【发布时间】:2021-10-31 22:17:02
【问题描述】:
会有一个数组和一个数字。
我想按数字从 array 中获取所有可能的组合。 我的意思是如果数组是 [2,4,1,3,0,1] 并且数字是 5, 那么结果将是 [2,3] [4,1] [2,3,0] [4,1,0] [1,3,1,0]。
所以,我试试这个算法
function solution(arr, n) {
let result = []
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
let sum = arr[i] + arr[j]
if(sum === n) {
result.push([arr[i], arr[j]])
}
}
}
return result
}
但是,此算法仅适用于两种组合。 最近五个小时,我一直在想怎么做三个组合和四个组合。
有什么方法可以访问它来解决这个问题?
【问题讨论】:
-
听起来像臭名昭著的子集和问题。
-
简单的蛮力方法是遍历所有 2^N 个可能的组合并检查总和。
-
数组中会只有正数吗?
-
@RickardElimää:样本中有一个零。
-
好的,我重新提出这个问题。 :) 数组中会有负数吗?
标签: javascript algorithm combinations