思路显然是暴力枚举.

但是两个问题:

1.当1的位数非常大时,模运算很费时间,会超时.

其实每次不用完全用'11111...'来%K,上一次的余数*10+1后再%K就行.

证明:

令f(n)=111111...(n个1);  

 g(n)=f(n)%K

 因为f(n)=f(n-1)*10+1

 所以f(n)%K=(f(n-1)*10+1)%K

 即g(n)=g(n-1)*10+1

2.枚举何时停止?

一种方法是可以设置一个大数,比如10的6次方,可以Accepted.

更精确的方法是:从1个1到K个1,如果这里都没有答案,后面也没了.

因为K的余数不包括0的话有K-1个,我们算了K个,K个里面没有0的话,里面必然至少有两个相等的(抽屉原理),而根据第一个问题所示,相邻的余数有关系,所以一相等之后就是重复循环这些数了,前面找不到后面也肯定没有了.例如K=6:

  • 1 % 6 = 1
  • 11 % 6 = 5
  • 111 % 6 = 3
  • 1111 % 6 = 1
  • 11111 % 6 = 5
  • 111111 % 6 = 3
class Solution:def smallestRepunitDivByK(self, K: int) -> int:if K % 2 == 0 or K % 5 == 0:return -1g = 0for i in range(1, K+1):g = (g * 10 + 1) % Kif g == 0:return ireturn -1

转载于:https://www.cnblogs.com/zywscq/p/10699120.html

Leetcode 1015. Smallest Integer Divisible by K相关推荐

  1. leetcode 974 Subarray Sums Divisible by K

    leetcode 974 Subarray Sums Divisible by K 1.题目描述 2.解题思路 3.Python代码 1.题目描述 给定一个整数数组 A,返回其中元素之和可被 K 整除 ...

  2. leetcode 974. Subarray Sums Divisible by K

    974. Subarray Sums Divisible by K 题意:给你一个数组A和一个数K,求改数组有多少连续子序列的和能被K整除. 思路:简单DP.假设sum[i]表示[0-i]的求和,那么 ...

  3. leetcode 974. Subarray Sums Divisible by K的解法(统计共同余数)

    题目大意:给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目 大致思路:比如数组A = [1,2,1], K=2,那么1%2 =1,(1+2)%2=1,所以 {2}是符合 ...

  4. LeetCode 974. Subarray Sums Divisible by K--Python解法--数学题--取模求余

    LeetCode 974. Subarray Sums Divisible by K–Python解法–数学题–取模求余 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结 ...

  5. 【leetcode】974. Subarray Sums Divisible by K

    题目如下: Given an array A of integers, return the number of (contiguous, non-empty) subarrays that have ...

  6. leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排

    leetcode 面试题 17.14. 最小K个数 [难度:中等] 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], ...

  7. 【LeetCode】863. All Nodes Distance K in Binary Tree 解题报告(Python)

    [LeetCode]863. All Nodes Distance K in Binary Tree 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http ...

  8. LeetCode 973. 最接近原点的 K 个点(排序/优先队列/快排)

    文章目录 1. 题目 2. 解题 2.1 排序 2.2 优先队列 2.3 快排思路 1. 题目 我们有一个由平面上的点组成的列表 points.需要从中找出 K 个距离原点 (0, 0) 最近的点. ...

  9. LeetCode 215. 数组中的第K个最大元素(快速排序)

    1. 题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...

最新文章

  1. Apache、php、mysql默认安装路径
  2. [OS复习]设备管理4
  3. Windows10选择文件打开方式没有始终允许的解决方案
  4. Linux 访问文件的acl信息,linux文件权限管理与ACL访问控制列表
  5. 软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试
  6. GoF23种设计模式之行为型模式之策略模式
  7. java生成点阵图_Android从SD卡读取图片并显示为点阵图
  8. Windows 7 测试体验
  9. COLING2018计算语言学进展
  10. 知乎python小项目_python进阶知乎
  11. zTree 树形中的搜索定位节点
  12. 高德地图导航和路径规划
  13. [INSHack2019]Passthru
  14. python与医学统计_python简单数据分析——医药数据分析
  15. 解决u盘插入电脑提示扫描并修复
  16. 计算器软件设计和计算机软件设计区别,基于LabVIEW的计算器程序设计
  17. 微信小程序上传Excel文件并分析上传值数据库
  18. javascript中的正则表达式语法
  19. (免费分享)基于springboot论坛bbs系统
  20. 史上最长最全!围绕故障管理谈SRE体系建设

热门文章

  1. 服务器内部错误_阿里云服务器被CC攻击怎么办
  2. node php go python_PHP 可能在未来十年内消失?
  3. java 表达式写法_java内置核心4大函数式接口写法和lambda表达式
  4. 2020年的前端该怎么学?不吹不黑
  5. php的注入点,Php注入点构造代码
  6. using在sql中是什么意思_扇贝英语地道表达法——“call for”是什么意思呢?
  7. 用账号连无线网怎么连接网络连接服务器,路由器怎么共用一个宽带账号
  8. linux 摄像头设置时间同步,linux系统设置时间同步
  9. python 进度条_6种酷炫Python运行进度条
  10. Linux 环境下NFS服务安装及配置