Skip to content

Commit c6fecc5

Browse files
committed
feat: add solutions to lc problem: No.1015
No.1015.Smallest Integer Divisible by K
1 parent 5d85103 commit c6fecc5

File tree

6 files changed

+155
-2
lines changed

6 files changed

+155
-2
lines changed

solution/1000-1099/1015.Smallest Integer Divisible by K/README.md

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,81 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50+
**方法一:数学**
51+
52+
我们注意到,正整数 $n$ 初始值为 $1$,每次乘以 $10$ 后再加 $1$,即 $n = n \times 10 + 1$,而 $(n \times 10 + 1) \bmod k = ((n \bmod k) \times 10 + 1) \bmod k$,因此我们可以通过计算 $n \bmod k$ 来判断 $n$ 是否能被 $k$ 整除。
53+
54+
我们从 $n = 1$ 开始,每次计算 $n \bmod k$,直到 $n \bmod k = 0$,此时 $n$ 就是我们要求的最小正整数,其长度即为 $n$ 的位数。否则,我们更新 $n = (n \times 10 + 1) \bmod k$。如果循环 $k$ 次后,仍然没有找到 $n \bmod k = 0$,则说明不存在这样的 $n$,返回 $-1$。
55+
56+
时间复杂度 $O(k)$,空间复杂度 $O(1)$。其中 $k$ 为给定的正整数。
57+
5058
<!-- tabs:start -->
5159

5260
### **Python3**
5361

5462
<!-- 这里可写当前语言的特殊实现逻辑 -->
5563

5664
```python
57-
65+
class Solution:
66+
def smallestRepunitDivByK(self, k: int) -> int:
67+
n = 1 % k
68+
for i in range(1, k + 1):
69+
if n == 0:
70+
return i
71+
n = (n * 10 + 1) % k
72+
return -1
5873
```
5974

6075
### **Java**
6176

6277
<!-- 这里可写当前语言的特殊实现逻辑 -->
6378

6479
```java
80+
class Solution {
81+
public int smallestRepunitDivByK(int k) {
82+
int n = 1 % k;
83+
for (int i = 1; i <= k; ++i) {
84+
if (n == 0) {
85+
return i;
86+
}
87+
n = (n * 10 + 1) % k;
88+
}
89+
return -1;
90+
}
91+
}
92+
```
93+
94+
### **C++**
95+
96+
```cpp
97+
class Solution {
98+
public:
99+
int smallestRepunitDivByK(int k) {
100+
int n = 1 % k;
101+
for (int i = 1; i <= k; ++i) {
102+
if (n == 0) {
103+
return i;
104+
}
105+
n = (n * 10 + 1) % k;
106+
}
107+
return -1;
108+
}
109+
};
110+
```
65111
112+
### **Go**
113+
114+
```go
115+
func smallestRepunitDivByK(k int) int {
116+
n := 1 % k
117+
for i := 1; i <= k; i++ {
118+
if n == 0 {
119+
return i
120+
}
121+
n = (n*10 + 1) % k
122+
}
123+
return -1
124+
}
66125
```
67126

68127
### **...**

solution/1000-1099/1015.Smallest Integer Divisible by K/README_EN.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,64 @@
4949
### **Python3**
5050

5151
```python
52-
52+
class Solution:
53+
def smallestRepunitDivByK(self, k: int) -> int:
54+
n = 1 % k
55+
for i in range(1, k + 1):
56+
if n == 0:
57+
return i
58+
n = (n * 10 + 1) % k
59+
return -1
5360
```
5461

5562
### **Java**
5663

5764
```java
65+
class Solution {
66+
public int smallestRepunitDivByK(int k) {
67+
int n = 1 % k;
68+
for (int i = 1; i <= k; ++i) {
69+
if (n == 0) {
70+
return i;
71+
}
72+
n = (n * 10 + 1) % k;
73+
}
74+
return -1;
75+
}
76+
}
77+
```
78+
79+
### **C++**
80+
81+
```cpp
82+
class Solution {
83+
public:
84+
int smallestRepunitDivByK(int k) {
85+
int n = 1 % k;
86+
for (int i = 1; i <= k; ++i) {
87+
if (n == 0) {
88+
return i;
89+
}
90+
n = (n * 10 + 1) % k;
91+
}
92+
return -1;
93+
}
94+
};
95+
```
5896
97+
### **Go**
98+
99+
```go
100+
func smallestRepunitDivByK(k int) int {
101+
n := 1 % k
102+
for i := 1; i <= k; i++ {
103+
if n == 0 {
104+
return i
105+
}
106+
n = (n*10 + 1) % k
107+
}
108+
return -1
109+
}
59110
```
60111

61112
### **...**
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
int smallestRepunitDivByK(int k) {
4+
int n = 1 % k;
5+
for (int i = 1; i <= k; ++i) {
6+
if (n == 0) {
7+
return i;
8+
}
9+
n = (n * 10 + 1) % k;
10+
}
11+
return -1;
12+
}
13+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
func smallestRepunitDivByK(k int) int {
2+
n := 1 % k
3+
for i := 1; i <= k; i++ {
4+
if n == 0 {
5+
return i
6+
}
7+
n = (n*10 + 1) % k
8+
}
9+
return -1
10+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public int smallestRepunitDivByK(int k) {
3+
int n = 1 % k;
4+
for (int i = 1; i <= k; ++i) {
5+
if (n == 0) {
6+
return i;
7+
}
8+
n = (n * 10 + 1) % k;
9+
}
10+
return -1;
11+
}
12+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def smallestRepunitDivByK(self, k: int) -> int:
3+
n = 1 % k
4+
for i in range(1, k + 1):
5+
if n == 0:
6+
return i
7+
n = (n * 10 + 1) % k
8+
return -1

0 commit comments

Comments
 (0)