File tree Expand file tree Collapse file tree 6 files changed +155
-2
lines changed
solution/1000-1099/1015.Smallest Integer Divisible by K Expand file tree Collapse file tree 6 files changed +155
-2
lines changed Original file line number Diff line number Diff line change 47
47
48
48
<!-- 这里可写通用的实现逻辑 -->
49
49
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
+
50
58
<!-- tabs:start -->
51
59
52
60
### ** Python3**
53
61
54
62
<!-- 这里可写当前语言的特殊实现逻辑 -->
55
63
56
64
``` 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
58
73
```
59
74
60
75
### ** Java**
61
76
62
77
<!-- 这里可写当前语言的特殊实现逻辑 -->
63
78
64
79
``` 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
+ ```
65
111
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
+ }
66
125
```
67
126
68
127
### ** ...**
Original file line number Diff line number Diff line change 49
49
### ** Python3**
50
50
51
51
``` 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
53
60
```
54
61
55
62
### ** Java**
56
63
57
64
``` 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
+ ```
58
96
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
+ }
59
110
```
60
111
61
112
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments