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

如何让判断彩色数的Python函数支持任意长度的整数?

优化后的彩色数判断函数

优化思路

原代码通过硬编码分支处理1-3位数字,无法支持更长整数,且代码冗余。优化方案做了以下改进:

  • 移除固定长度的分支判断,用循环通用处理任意长度的数字
  • 增加快速过滤逻辑:包含0或1的数直接判定为非彩色数(0会导致重复乘积,1会使乘积与原数字重复)
  • 用嵌套循环生成所有连续子序列的乘积,逻辑清晰易读

完整代码

def is_colorful(num):
    # 将数字拆分为单个数字的列表
    digits = [int(c) for c in str(num)]
    
    # 快速过滤:含0或1的数不可能是彩色数
    if 0 in digits or 1 in digits:
        return False
    
    # 生成所有连续子序列的乘积
    products = []
    for start in range(len(digits)):
        current_product = 1
        for end in range(start, len(digits)):
            current_product *= digits[end]
            products.append(current_product)
    
    # 通过集合去重后比较长度,判断是否有重复值
    return len(set(products)) == len(products)

代码说明

  1. 数字拆分:将输入整数转为字符串后,逐个字符转为整数,得到单个数字的列表
  2. 快速过滤:提前排除含0或1的数字,避免不必要的计算
  3. 乘积生成:外层循环控制子序列的起始位置,内层循环从起始位置开始累积乘积,将每一步的乘积加入列表
  4. 重复判断:利用集合自动去重的特性,比较去重前后的长度,若相等则说明无重复乘积,即为彩色数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:55:12