检查所有子编号在Python中是否具有不同的Digit乘积

假设我们有一个数字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