假设我们有一个数字n,我们必须检查该数字的所有子数字是否都具有唯一数字乘积。众所周知,n位数字具有n *(n + 1)/ 2个子数字。例如,子数字135是1、3、5、13、35、135。数字的数字乘积是其数字的乘积。
因此,如果输入像n = 235,则输出将为True,因为子数字为[2、3、5、23、35、235],数字乘积为[2、3、5、6、15、30 ]
为了解决这个问题,我们将遵循以下步骤-
定义功能 dig_prod()。这将需要数字
产品:= 1
对于每个数字d
产品:=产品* d
退货
从主要方法执行以下操作:
num_str:= num作为字符串
长度:= num_str的大小
digits:=大小长度的列表,最初所有值均为null
prod_set:=一个新的空集
对于长度范围为0的i,执行
digits [i]:= num_str [i]作为整数
对于范围在0到长度-1之间的i
项目:= dig_prod(数字[从索引i到j])
如果项目在prod_set中,则
除此以外,
返回False
将项目插入prod_set
对于范围i到长度1的j,执行
返回True
让我们看下面的实现以更好地理解-
def dig_prod(digits): product = 1 for d in digits: product *= d return product def solve(num): num_str = str(num) length = len(num_str) digits = [None] * length prod_set = set() for i in range(0, length): digits[i] = int(num_str[i]) for i in range(0, length): for j in range(i, length): item = dig_prod(digits[i:j+1]) if item in prod_set: return False else: prod_set.add(item) return True n = 235 print(solve(n))
235输出结果
True