leetcode第129周赛-1015. Smallest Integer Divisible by K,被K整除的最小整数
2019-04-15 17:26
471 查看
版权声明:本文为博主原创文章,欢迎转载,但是请注明出处! https://blog.csdn.net/hubin1995/article/details/89315654
题目描述:
给定一个正整数K(1<=K<=1e5),找一个最小整数M(全由1构成,例如1,11,111,11111),使得该整数能被K整除
求最小正整数M
原题链接:https://leetcode.com/problems/smallest-integer-divisible-by-k/
示例-example:
Example 1:
[code]Input: 1 Output: 1 Explanation: The smallest answer is N = 1, which has length 1.Example 2:
[code]Input: 2 Output: -1 Explanation: There is no such positive integer N divisible by 2.Example 3:
[code]Input: 3 Output: 3 Explanation: The smallest answer is N = 111, which has length 3.
解决思路:
1)首先很显然,当K的因数包含2或者5时,不可能找到全为1的正整数M满足题意。
2)假设K=113,显然从M=1111开始尝试,首先余数remainder=M%K=94。又因为M_next = 11111 = 10 * M + 1,所以有M_next % K = (10 * (M % K) + 1) % K。后面所有依此类推,直到余数为0(说明找到解)或者余数出现重复(说明无解)。
3)为了解决余数重复出现的问题,需要一个list或者set来进行判断,诸位可以根据自己所掌握的编程语言,自行设计这一环节。
Python3代码:
[code]class Solution: def smallestRepunitDivByK(self, K: int) -> int: if K%2 == 0 or K%5 == 0: return -1 minlen = 1 nowrem = 1 % K remainderlist = list([]) while (nowrem != 0) and (nowrem not in remainderlist): nowrem = (10 * nowrem + 1) % K minlen += 1 if nowrem == 0: return minlen else: return -1
一些体会:
1)上述代码实测发现,即使不使用remainderlist来判断余数是否出现也能Accepted。由此猜测,要么是题目给的测试样例过于友好;要么可以得到一条数学推论:任意一个正整数K,如果它的余数不包含2和5,那么一定可以找到一个全由1组成的数字M,使得M能被K整除。关于这个数学推论,在下感觉挺有意思的,不知道有没有数学系的大神可以证明下?
2)最开始不需要判断K是几位数,然后找一个恰好不小于K的M。因为M从1开始就一直满足前面解题思路中所说的规律,所以直接让M从1开始查找就行了。
相关文章推荐
- LeetCode-Python-1022. 可被 K 整除的最小整数
- LeetCode--7.整数反转(Reverse Integer)
- LeetCode Integer to English Words(整数转化为英文字母)
- leetcode8- String to Integer (atoi 字符串转整数)
- LeetCode | Integer to Roman(整数转换成罗马数字)
- [LeetCode] Integer to English Words 整数转为英文单词
- (LeetCode) Roman to Integer --- 罗马数字转整数
- LeetCode:String to Integer (atoi) -one solution coded by c language
- LeetCode——Reverse Integer(逆置一个整数)
- [LeetCode] Integer Replacement 整数替换
- leetcode 7 Reverse Integer(翻转一个有符号的整数)
- [LeetCode]69. Recerse Integer旋转整数
- [LeetCode] Largest Divisible Subset 最大可整除的子集合
- 【leetcode】Reverse Integer整数反转----Java代码实现
- LeetCode:第7题: 反转整数(reverse-integer)
- [置顶] [LeetCode] Reverse Integer 整数反转
- LeetCode_13_Roman to Integer_罗马数字转整数
- [LeetCode] Smallest Good Base 最小的好基数
- (LeetCode)Integer Replacement --- 整数替换
- [LeetCode] 8. String to Integer (atoi) 字符串转为整数