📅  最后修改于: 2023-12-03 14:50:38.250000             🧑  作者: Mango
本题的主要目标是给定一个整数K,找到一个最小的正整数N,使得N只有由1组成的数字,并且N可以被K整除。
我们可以使用广度优先搜索来解决这个问题,即从小到大枚举由1组成的不同长度的数字,检查它们是否可以被K整除,直到找到一个最小的可行解。
我们需要维护两个队列:一个是存储由1组成的数字的长度的队列,另一个是存储尝试被K整除的数字的队列。
def smallestRepunitDivByK(K: int) -> int:
if K % 2 == 0 or K % 5 == 0:
return -1
queue = deque([1])
visited = set([1])
length = 1
while queue:
for _ in range(len(queue)):
num = queue.popleft()
if num % K == 0:
return length
for digit in (0, 1):
next_num = (num * 10 + digit) % K
if next_num not in visited:
visited.add(next_num)
queue.append(next_num)
length += 1
return -1
本题是一道简单但不容易被一开始理解,需要通过广度优先搜索来构造解,找到最小的正整数N。但在判断可行解时,需要特别注意K能否被2或者5整除的情况。