You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript数组全子集生成代码修正请求

修正基于二进制逻辑的数组子集生成程序

原代码的问题在于未为每个子集单独收集元素,而是直接将单个元素的数组推入结果,同时遗漏了空子集的处理。以下是修正后的代码:

const getAllSubsets = arr => {
    const n = arr.length;
    const subsets = [];
    // 遍历所有可能的二进制状态,共2^n种
    for (let i = 0; i < (1 << n); i++) {
        const currentSubset = [];
        // 检查每个位是否为1,对应是否包含数组中的元素
        for (let j = 0; j < n; j++) {
            if ((1 << j) & i) {
                currentSubset.push(arr[j]);
            }
        }
        // 将当前子集加入结果数组
        subsets.push(currentSubset);
    }
    return subsets;
};

console.log(getAllSubsets([1, 2, 3]));

代码说明

  • 外层循环变量i从0到2^n -1(通过1 << n计算2的n次方),每个i对应一个二进制数,每一位代表是否包含数组中对应位置的元素。
  • 每次外层循环初始化一个currentSubset数组,用于收集当前子集的元素。
  • 内层循环检查i的第j位是否为1,若是则将arr[j]加入currentSubset。
  • 内层循环结束后,将currentSubset(包括i=0时的空数组)推入结果数组subsets。

运行修正后的代码,输入[1,2,3]会输出所有8个子集:[], [1], [2], [1,2], [3], [1,3], [2,3], [1,2,3],符合子集生成的预期。

内容的提问来源于stack exchange,提问作者Sougata Mukherjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:42:08