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

生成无重复且无连续递增数字的唯一四位数编码列表

生成符合规则的数字编码(支持扩展至多位)

需求明确

我需要生成一组用作编码的数字,核心规则如下:

  • 基础目标:四位数编码,数字完全不重复,且后一位数字不能是前一位的连续递增(即 后一位 ≠ 前一位 + 1)
  • 特殊允许:反转数字可共存(比如 1357 和 7531 都保留)
  • 扩展需求:可以扩展生成五位数、六位数等更长编码

下面是我实现的函数,同时分享递归扩展的思路,欢迎大家提出改进建议。

四位数编码实现(迭代过滤版)

def generate_four_digit_codes():
    valid_codes = []
    # 遍历所有无重复数字的四位数排列
    from itertools import permutations
    for digits in permutations('0123456789', 4):
        code = ''.join(digits)
        # 跳过前导零的编码(如果业务允许前导零可移除这行)
        if code.startswith('0'):
            continue
        # 检查是否存在连续递增的相邻位
        invalid = False
        for i in range(3):
            if int(digits[i+1]) == int(digits[i]) + 1:
                invalid = True
                break
        if not invalid:
            valid_codes.append(code)
    return valid_codes

# 使用示例
codes = generate_four_digit_codes()
print(f"符合规则的四位数编码总数:{len(codes)}")

递归扩展实现(支持任意长度)

为了适配更长位数的编码生成,递归方案可以在构建过程中直接过滤不符合规则的情况,避免生成所有排列再筛选,效率更高:

def build_valid_codes(length, current=[], used=set(), result=None):
    if result is None:
        result = []
    if len(current) == length:
        result.append(''.join(current))
        return
    for num in '0123456789':
        # 跳过已使用的数字
        if num in used:
            continue
        # 跳过前导零(如果不允许的话)
        if not current and num == '0':
            continue
        # 跳过连续递增的情况
        if current and int(num) == int(current[-1]) + 1:
            continue
        # 递归构建
        build_valid_codes(length, current + [num], used | {num}, result)
    return result

# 生成五位数编码示例
five_digit_codes = build_valid_codes(5)
print(f"符合规则的五位数编码总数:{len(five_digit_codes)}")

待改进方向征集

目前的实现满足基础需求,但还有优化空间:

  • 性能:针对8位及以上的长编码,递归或排列过滤的效率可能下降,有没有更高效的剪枝策略或数学计算方式?
  • 扩展性:如果后续要添加新规则(比如禁止连续递减、排除特定数字),怎么让函数更灵活?
  • 内存:当生成大量编码时,能否实现按需生成(迭代器模式),而不是一次性存储所有结果?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:50:23