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

如何求解数组中元素个数恰好为N的所有子序列

数组N元长度子序列求解方案

问题需求:给定任意数组,输出所有由恰好N个元素组成的子序列。子序列需保持原数组的元素相对顺序,不允许重复。
示例输入:arr = [1,2,3,4],N=3
示例输出:[[1,2,3], [1,2,4], [1,3,4], [2,3,4]]


核心思路

这个问题本质是求数组的N元无重复组合,组合的特性就是元素顺序和原数组保持一致,刚好匹配子序列的定义要求。


实现方案

方案1:手写回溯算法(无第三方依赖)

回溯是最通用的实现方式,不受编程语言限制,时间复杂度为$O(C(k,n))$,其中$C(k,n)$是从k个元素选n个的组合数,是该问题的最优时间复杂度。
代码示例(Python):

def find_n_length_subsequences(arr, n):
    result = []
    def backtrack(start_idx, current_path):
        # 已选元素数量达标,存入结果
        if len(current_path) == n:
            result.append(current_path.copy())
            return
        # 剩余可选元素数量不够时直接剪枝,优化性能
        if len(arr) - start_idx < n - len(current_path):
            return
        for i in range(start_idx, len(arr)):
            current_path.append(arr[i])
            backtrack(i + 1, current_path)
            current_path.pop()
    backtrack(0, [])
    return result

# 测试
print(find_n_length_subsequences([1,2,3,4], 3))
# 输出:[[1,2,3], [1,2,4], [1,3,4], [2,3,4]]

方案2:调用内置组合函数

大部分主流编程语言都有内置的组合计算工具,可直接调用简化代码:
Python示例(使用itertools.combinations):

from itertools import combinations

arr = [1,2,3,4]
n = 3
res = [list(item) for item in combinations(arr, n)]
print(res)
# 输出与上述一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:39:04