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
相关产品推荐
相关产品推荐

