如何让判断彩色数的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)
代码说明
- 数字拆分:将输入整数转为字符串后,逐个字符转为整数,得到单个数字的列表
- 快速过滤:提前排除含0或1的数字,避免不必要的计算
- 乘积生成:外层循环控制子序列的起始位置,内层循环从起始位置开始累积乘积,将每一步的乘积加入列表
- 重复判断:利用集合自动去重的特性,比较去重前后的长度,若相等则说明无重复乘积,即为彩色数
内容的提问来源于stack exchange,提问作者Alastair909
相关产品推荐
相关产品推荐

