检查所有子数字在Python中是否具有不同的数字乘积
假设我们有一个数字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
- 对于digits中的每个d,执行
- 乘积 := 乘积 * d
- 返回乘积
- 从主方法执行以下操作
- num_str := num作为字符串
- 长度 := num_str的大小
- digits := 一个大小为length的列表,最初所有值都为null
- prod_set := 一个新的空集合
- 对于范围从0到length的i,执行
- digits[i] := num_str[i]作为整数
- 对于范围从0到length - 1的i,执行
- 对于范围从i到length - 1的j,执行
- item := dig_prod(digits[从索引i到j])
- 如果item在prod_set中,则
- 返回False
- 否则,
- 将item插入prod_set
- 对于范围从i到length - 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
广告