Giả sử chúng ta có một số nguyên dương K, chúng ta cần tìm số nguyên dương N nhỏ nhất sao cho N chia hết cho K và N chỉ chứa chữ số 1. Ta phải tìm độ dài của N. Nếu không có N như vậy, trả về:1. Vì vậy, nếu đầu vào là 3, thì đầu ra sẽ là 3. Câu trả lời nhỏ nhất sẽ là N =111.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- nếu k chẵn hoặc k chia hết cho 5 thì trả về -1
- đặt r:=0 và N =1
- cho tôi trong phạm vi từ 1 đến K + 1
- r:=(r * 10 + 1) mod k
- nếu r =0, thì trả về i
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution(object): def smallestRepunitDivByK(self, K): if K%2==0 or K%5 ==0: return -1 r = 0 N=1 for i in range(1,K+1): r = (r*10 + 1)%K if r == 0: return i ob = Solution() print(ob.smallestRepunitDivByK(11))
Đầu vào
11
Đầu ra
2