1015. 可被 K 整除的最小整数(leetcode)取模技巧题-------------------c++实现
题目表述
给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的最 小 正整数 n 的长度。
返回 n 的长度。如果不存在这样的 n ,就返回-1。
注意: n 不符合 64 位带符号整数。
样例
示例 1:
输入:k = 1
输出:1
解释:最小的答案是 n = 1,其长度为 1。
示例 2:
输入:k = 2
输出:-1
解释:不存在可被 2 整除的正整数 n 。
示例 3:
输入:k = 3
输出:3
解释:最小的答案是 n = 111,其长度为 3。
条件
1 <= k <= 105
思路
1.暴力解法,先取n为1,然后每次对k取模,然后×10+1,记录每次取模后的余数,如果余数相同则表示有循环,说明没有可以整除k的n。
2.暴力解法的优化
注意点
ac代码
c++:
class Solution {
public:
int smallestRepunitDivByK(int k) {
if(k%2==0||k%5==0)
return -1;
int n=1,now;
unordered_set<int> remainder;
while(n%k!=0){
n%=k;
if(remainder.find(n)!=remainder.end())
return -1;
else
{remainder.insert(n);
n=n*10+1;
}
}
return remainder.size()+1;
}
};
class Solution {
public:
int smallestRepunitDivByK(int k) {
if (k%2==0||k%5==0) {
return -1;
}
int remainder=1%k,length=1;
while (remainder!=0) {
remainder = (remainder*10+1)%k;
length++;
}
return length;
}
};
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/smallest-integer-divisible-by-k/solution/ke-bei-k-zheng-chu-de-zui-xiao-zheng-shu-ynog/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。