Skip to content

Commit 6b21eef

Browse files
author
robot
committed
fix: 文字修正
1 parent 0546a17 commit 6b21eef

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

problems/1015.smallest-integer-divisible-by-k.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,20 @@ https://leetcode-cn.com/problems/smallest-integer-divisible-by-k/
4444

4545
## 思路
4646

47-
这道题是说给定一个 K 值,能否找到一个形如 1,11,111,1111 。。。 这样的数字 n 使得 n % K == 0。
47+
这道题是说给定一个 K 值,能否找到一个形如 1,11,111,1111 。。。 的数字 n,使得 n % K == 0,并要求 n 尽可能地小
4848

49-
首先容易想到的是如果 K 是 2,4,5, 6,8 结尾的话,一定是不行的。直观的解法是从 1,11,111,1111 。。。 这样一直除下去,直到碰到可以整除的,我们返回即可。 但是如果这个数字根本就无法整除怎么办?没错,我们会无限循环下去。我们应该在什么时刻跳出循环,返回 - 1 (表示不能整除)呢?
49+
由于题目要找一个尽可能小的 n ,那么我们可以从小到大进行枚举,知道找到这样的一个 n 值即可。即从 1,11,111,1111 。。。 这样一直除下去,直到碰到可以整除的,我们返回即可。
5050

51-
我们拿题目给出的不能整除的 2 来说。
51+
但是如果这个数字根本就无法整除怎么办?没错,我们会无限循环下去。我们应该在什么时刻跳出循环返回 - 1 (表示不能整除)呢?
52+
53+
比如 k = 2 来说我们的算法过程如下:
5254

5355
- 1 // 2 等于 1
5456
- 11 // 2 等于 1
5557
- 111 // 2 等于 1
5658
- ...
5759

58-
我们再来一个不能整除的例子 6:
60+
如果 k = 6 算法过程如下:
5961

6062
- 1 // 6 等于 1
6163
- 11 // 6 等于 5
@@ -66,7 +68,9 @@ https://leetcode-cn.com/problems/smallest-integer-divisible-by-k/
6668

6769
通过观察我们发现不断整除的过程,会陷入无限循环,对于 2 来说,其循环节就是 1。对于 6 来说,其循环节来说就是 153。而且由于我们的分母是 6,也就是说余数的可能性一共只有六种情况 0,1,2,3,4,5。
6870

69-
上面是感性的认识, 接下来我们从数学上予以证明。上面的算法用公式来表示就是`mod = (10 \* mod + 1) % K`。假如出现了相同的数,我们可以肯定之后会无限循环。比如 153 之后出现了 1,我们可以肯定之后一定是 35。。。 因为我们的 mod 只是和前一个 mod 有关,上面的公式是一个`纯函数`
71+
上面是感性的认识, 接下来我们从数学上予以证明。
72+
73+
上面的算法用公式来表示就是`mod = (10 * mod + 1) % K`,其中 mode 为 111xxx111 模 k 的值。假如出现了相同的数,我们可以肯定之后会无限循环。比如 153 之后出现了 1,我们可以肯定之后一定是 35。。。 这是因为我们的 mod 只是和前一个 mod 有关。换句话说就是上面的公式`mod = (10 * mod + 1) % K`是一个`纯函数`,相同的输入输出总是相同的。(也就是说 x mod k 后是 y,下次再碰到 x,继续 mod k 一定还是 y,然后无限循环下去)。
7074

7175
## 关键点解析
7276

0 commit comments

Comments
 (0)