给定0和1列表计算不同二进制序列排列数及代码错误排查
问题需求
给定一个由二进制数(0和1)组成的列表,计算使用给定的0和1可以排列出的不同二进制序列的总数量。
输入格式
单行输入,内容为若干个用空格分隔的0和1
输出格式
输出一个整数值,代表给定0和1可排列出的不同二进制序列的数量
示例
输入:0 1 0 1
输出:6
示例说明
对于上述输入,可生成的不同二进制序列包括0011、0101、0110、1001、1010、1100,因此输出结果为6。
代码问题修复
错误原因
你的代码使用普通除法/计算阶乘比值是问题根源:
- Python中
/会返回浮点数,当输入序列长度较大时,阶乘结果远超浮点数精度范围,会出现计算失真、甚至溢出报错的问题 - 该场景属于整数运算场景,应该使用整数除法避免精度损失
修复方案1 兼容所有Python版本
将普通除法替换为整数除法//,同时优化变量可读性:
import math c = input().split() count_0 = 0 count_1 = 0 for i in c: num = int(i) if num == 0: count_0 += 1 elif num == 1: count_1 += 1 total_len = len(c) answer = math.factorial(total_len) // (math.factorial(count_1) * math.factorial(count_0)) print(answer)
修复方案2 Python 3.10+ 更简洁写法
直接使用内置组合数计算方法math.comb,性能更高、代码更简洁:
import math c = input().split() count_1 = sum(1 for item in c if item == '1') print(math.comb(len(c), count_1))
内容的提问来源于stack exchange,提问作者Amazon King
相关产品推荐
相关产品推荐

