1015. 可被 K 整除的最小整数

Posted xxxsans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1015. 可被 K 整除的最小整数相关的知识,希望对你有一定的参考价值。

给定正整数 K,你需要找出可以被 K 整除的、仅包含数字 1 的最小正整数 N。

返回 N 的长度。如果不存在这样的 N,就返回 -1。

 

示例 1:

输入:1
输出:1
解释:最小的答案是 N = 1,其长度为 1。
示例 2:

输入:2
输出:-1
解释:不存在可被 2 整除的正整数 N 。
示例 3:

输入:3
输出:3
解释:最小的答案是 N = 111,其长度为 3。
 

提示:

1 <= K <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/smallest-integer-divisible-by-k

首先想到的是搞个循环一直除直到得到结果,而对于return -1的情况就要找规律了

  • 1 % 5 等于 1
  • 11 % 5 等于 1
  • 111 % 5 等于 1
  • 1111 % 5 等于 1
  • 11111 % 5 等于 1
  • ...
  • 1 % 6 等于 1
  • 11 % 6 等于 5
  • 111 % 6 等于 3
  • 1111 % 6 等于 1
  • 11111 /% 6 等于 5
  • ...

会发现return -1的数会得到循环节,代码就好写了

 

class Solution:
    def smallestRepunitDivByK(self, K: int) -> int:
        if K%10 in [2,4,5,6,8,10]:
            return -1//先排掉一些明显的
        vis=set()
        mod=0
        for i in range(1,K+1):
            mod=(mod*10+1)%K
            if mod in vis:
                return -1//发现进入循环直接return -1
            if mod==0:
                return i
            vis.add(mod)

 

以上是关于1015. 可被 K 整除的最小整数的主要内容,如果未能解决你的问题,请参考以下文章

总和可被k整除的最长子序列[关闭]

leetcode 974. 和可被 K 整除的子数组

可被 k 整除的子数组数

计算总和可被 k 整除的子序列总数

数字总和可被 K 整除的子数组的数量

查找可被 6 或 7 整除但不能同时被 6 或 7 整除的整数