可被 K 整除的最小整数【LC1015】
给定正整数
k
,你需要找出可以被k
整除的、仅包含数字**1**
的最 小 正整数n
的长度。返回
n
的长度。如果不存在这样的n
,就返回-1。注意:
n
不符合 64 位带符号整数。
枚举n+哈希表
- 思路
从小到大枚举n,第一个能被k整除的数的长度即为答案。枚举n时记录n模k的结果,如果重复出现相同的计算结果,那么不存在能被k整除的n,返回-1 - 实现
class Solution { public int smallestRepunitDivByK(int k) { int len = 1; int n = 1 % k; boolean[] vis = new boolean[k + 1]; while (!vis[n]){ vis[n] = true; if (n == 0) return len; len++; n = (n * 10 + 1) % k; } return -1; } }
class Solution { public int smallestRepunitDivByK(int k) { if (k % 2 == 0 || k % 5 == 0) return -1; int x = 1 % k; for (int i = 1; ; i++) { // 一定有解 if (x == 0) return i; x = (x * 10 + 1) % k; } } } 作者:灵茶山艾府 链接:https://leetcode.cn/problems/smallest-integer-divisible-by-k/solutions/2263780/san-chong-suan-fa-you-hua-pythonjavacgo-tk4cj/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。