如何增量生成由[0,1,2,3,4,5]构成的无重复数字组合
实现方案
你要生成的本质是指定数字集合中长度从1到集合大小的所有无重复元素排列,可以用两种通用方案实现,都不需要硬编码嵌套层数,能直接适配任意长度的输入数字集合。
方案1:用Python标准库实现(最简写法)
直接调用itertools.permutations生成指定长度的全排列即可:
import itertools keys = [0, 1, 2, 3, 4, 5] # 遍历所有需要生成的长度:1到6 for length in range(1, len(keys)+1): # 生成当前长度的所有无重复排列 for perm in itertools.permutations(keys, length): # 把排列元组转成连续字符串输出 print(''.join(map(str, perm)))
方案2:手写回溯实现(无第三方依赖,可灵活定制)
如果需要自己控制生成逻辑,可以用回溯算法实现,一次遍历就能生成所有长度的结果:
keys = [0, 1, 2, 3, 4, 5] used = [False] * len(keys) def backtrack(current_str): # 只要当前字符串非空,就符合输出要求 if current_str: print(current_str) # 已经选完所有元素就终止 if len(current_str) == len(keys): return # 遍历所有可选的数字 for i in range(len(keys)): if not used[i]: used[i] = True backtrack(current_str + str(keys[i])) used[i] = False # 从空串开始回溯 backtrack("")
两种方案输出结果完全一致,都覆盖了你示例中所有1位到6位的无重复排列,输入数字集合变更时只需要修改keys的定义即可,不需要调整循环逻辑。
内容的提问来源于stack exchange,提问作者Passaro
相关产品推荐
相关产品推荐

