力扣1015题
题目描述:可被 K 整除的最小整数
给定正整数
k
,你需要找出可以被k
整除的、仅包含数字1
的最 小 正整数n
的长度。返回
n
的长度。如果不存在这样的n
,就返回-1。注意:
n
不符合 64 位带符号整数。
题解思路:
要先读懂题,刚开始一直没理解“你需要找出可以被
k
整除的、仅包含数字1
的最 小 正整数n
的长度。”这句话,后来才知道是只包含1的,比如1,11,111,1111,…这些的
- 首先发现,如果k是[2,4,5,6,8],是不可能找到符合要求的,直接返回-1;
- 再然后通过
n = (n*10+1) % k
每次后面+1并且mod k,如果为0,说明找到符合要求的长度了,返回 i 即可。
class Solution {
public int smallestRepunitDivByK(int k) {
//一种情况
if(k % 2==0 || k % 5 == 0){
return -1;
}
//另一种情况
int i = 1;//记录有多少个1
int n = i % k;
while(n !=0){
n = (n*10+1) % k;
++i;
}
return i;
}
}