所有元素必须用到的子集组合问题

给定一个数组,要求返回其所有可能的子集组合,其中每个组合必须包含数组中的所有元素。

解决方案

以下 javascript 代码提供了针对此问题的解决方案,并可以轻松转换为 java:

const arr = ['a', 'b', 'c'];

// 获取所有子集
function generatesubsets(arr, subset = [[]]) {
  if (arr.length === 0) {
    return subset;
  } else {
    const current = arr[0];
    const newsubset = [];
    subset.foreach(sub => {
      newsubset.push(sub.concat(current), sub);
    });
    return generatesubsets(arr.slice(1), newsubset);
  }
}

// 取子集一半项的差集
// 返回子集和差集的数组即为题目要求的结果
// 单独处理每个单项结果
function generatediffsets(arr, b) {
  var result = [];
  for (var i = 0; i < b xss=removed xss=removed xss=removed xss=removed> {
    return [i]
  })

  result.push(t)

  return result
}

var subsets = generatesubsets(arr)
var results = generatediffsets(arr, subsets)

console.log(results)
登录后复制

示例结果:

[
  ['A', ['B', 'C']],
  ['B', ['C', 'A']],
  ['C', ['A', 'B']],
  ['A', ['B']],
  ['B', ['C']],
  ['C', ['A']],
  [['A'], ['B', 'C']],
  [['B'], ['C', 'A']],
  [['C'], ['A', 'B']],
  [['A'], ['B']],
  [['B'], ['C']],
  [['C'], ['A']]
]
登录后复制

以上就是如何高效地获取数组所有子集及其与子集一半项的差集?的详细内容,更多请关注慧达安全导航其它相关文章!

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部