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

Python实现固定长度、步长≤1的非递减整数列表生成(支持自定义起始值)

解决方案:生成符合规则的整数列表(无嵌套循环)

方法1:递归实现

递归是处理这类层级依赖问题的简洁方式,每一步基于前一个元素的可能值生成后续元素。

def generate_sequences(length, start=0):
    # 基础情况:长度为1时,返回仅包含起始值的列表
    if length == 1:
        return [[start]]
    # 递归获取长度-1的所有序列
    prev_sequences = generate_sequences(length - 1, start)
    new_sequences = []
    for seq in prev_sequences:
        last = seq[-1]
        # 每个序列可追加当前最后一个元素,或最后一个元素+1
        new_sequences.append(seq + [last])
        new_sequences.append(seq + [last + 1])
    return new_sequences

# 测试:生成长度为4、起始值0的序列
print(generate_sequences(4))
# 生成长度为5、起始值0的序列
print(generate_sequences(5))

方法2:迭代实现(非递归)

如果担心递归调用栈限制,可采用迭代方式逐步构建序列,从基础长度开始扩展到目标长度。

def generate_sequences_iter(length, start=0):
    sequences = [[start]]
    for _ in range(length - 1):
        temp = []
        for seq in sequences:
            last = seq[-1]
            temp.append(seq + [last])
            temp.append(seq + [last + 1])
        sequences = temp
    return sequences

# 测试
print(generate_sequences_iter(4, 0))

逻辑说明

  • 两种方法核心逻辑一致:每个已生成的序列,最后一个元素只能延续自身或递增1,以此生成新序列。
  • 递归方法代码简洁直观,通过缩小问题规模(长度减1)构建结果。
  • 迭代方法从最小长度的序列开始,逐步扩展到目标长度,适合处理极大长度的场景。
  • 参数start默认设为0,支持自定义起始值需求。

输出验证

以长度4、起始值0为例,输出与你提供的代码结果完全一致:

[[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 1], [0, 0, 1, 2], [0, 1, 1, 1], [0, 1, 1, 2], [0, 1, 2, 2], [0, 1, 2, 3]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:17