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

如何循环生成固定长度数组元素保留原位置其余替换为0的所有组合

数组组合需求最优实现方案

核心逻辑

这个需求本质是枚举数组每个位置的二选一状态:每个位置独立决定保留原始值还是替换为0,总共有2^15=32768种合法组合,使用位掩码法是最优实现,无多余计算,逻辑清晰易懂。

实现步骤

  • 定义原始数组:origin = [10, 10, 10, 50, 50, 100, 100, 100, 500, 500, 500, 1000, 1000, 1000, 5000]
  • 遍历0到2^15-1(即0到32767)的所有整数,每个整数作为位掩码,每一位对应数组一个位置的选择
  • 对每个掩码逐位判断:第i位为1时,新数组第i位取原始值,否则取0
  • 输出生成的新数组即可

代码示例(Python)

origin = [10, 10, 10, 50, 50, 100, 100, 100, 500, 500, 500, 1000, 1000, 1000, 5000]
length = len(origin)
# 遍历所有位掩码组合
for mask in range(1 << length):
    current = []
    for idx in range(length):
        current.append(origin[idx] if (mask >> idx) & 1 else 0)
    print(current)

方案优势

  • 无冗余计算:刚好遍历所有合法组合,没有递归开销或重复判断逻辑
  • 达到理论最优时间复杂度O(n*2n),该问题本身需要生成n*2n个元素,没有进一步优化空间
  • 适配性强:任意长度的原始数组都可以直接套用该逻辑,不需要修改核心代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:54:03