LeetCode—1015

Approach

# 前一個數字的餘數乘以 10 再加 1。
111 = 11 * 10 + 1;
111 = (1 * 10 + 1) * 10 + 1;

if k == 3 ; (((10 % 3 + 1) * 10) % 3 + 1) % 3 = 0
> 10的因數永遠無法找到(排除1)

# 根據鴿籠原理,
# 求餘數可能的值只有 0 ~ k - 1 這 k 個可能,做k + 1次這個過程餘數值至少會重複一次
# 如果沒有辦法在k次裡面遇到餘數為0的結果,繼續做也不會遇到。

Time Complexity

# n = digit of k
O(n)

Space Complexity

O(1)

Code

class Solution {
public:
    int smallestRepunitDivByK(int k) {
        if (k % 2 == 0 || k % 5 == 0) {
            return -1;
        }
        else {
            int sum = 1, cnt = 1;
            while (sum % k != 0) {
                sum %= k;
                sum *= 10;
                sum += 1;
                cnt++;
            }
            return cnt;
        }
    }
};