Skip to content

Commit b89c1e6

Browse files
committed
feat: add solutions to lc problem: No.0754
No.0754.Reach a Number
1 parent 5df6c27 commit b89c1e6

File tree

6 files changed

+190
-2
lines changed

6 files changed

+190
-2
lines changed

solution/0700-0799/0754.Reach a Number/README.md

+73-1
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,94 @@
5353

5454
<!-- 这里可写通用的实现逻辑 -->
5555

56+
**方法一:数学**
57+
58+
由于对称性,我们将 `target` 统计取绝对值。
59+
60+
定义 `s`,一直循环累加,直至满足 $s\ge target$ 并且 $(s-target)\mod 2 = 0$。返回循环次数即可。
61+
62+
证明:如果 $s\ge target$ 且 $(s-target)\mod 2 = 0$,那么只需要把前面 $(s-target)/2$ 这个数变为负数即可。
63+
64+
时间复杂度 $O(\sqrt{target})$。
65+
5666
<!-- tabs:start -->
5767

5868
### **Python3**
5969

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

6272
```python
63-
73+
class Solution:
74+
def reachNumber(self, target: int) -> int:
75+
target = abs(target)
76+
k = s = 0
77+
while 1:
78+
if s >= target and (s - target) % 2 == 0:
79+
break
80+
k += 1
81+
s += k
82+
return k
6483
```
6584

6685
### **Java**
6786

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

7089
```java
90+
class Solution {
91+
public int reachNumber(int target) {
92+
target = Math.abs(target);
93+
int s = 0;
94+
int k = 0;
95+
while (true) {
96+
if (s >= target && (s - target) % 2 == 0) {
97+
break;
98+
}
99+
++k;
100+
s += k;
101+
}
102+
return k;
103+
}
104+
}
105+
```
106+
107+
### **C++**
108+
109+
```cpp
110+
class Solution {
111+
public:
112+
int reachNumber(int target) {
113+
target = abs(target);
114+
int s = 0, k = 0;
115+
while (true) {
116+
if (s >= target && (s - target) % 2 == 0) {
117+
break;
118+
}
119+
++k;
120+
s += k;
121+
}
122+
return k;
123+
}
124+
};
125+
```
71126
127+
### **Go**
128+
129+
```go
130+
func reachNumber(target int) int {
131+
s, k := 0, 0
132+
if target < 0 {
133+
target = -target
134+
}
135+
for {
136+
if s >= target && (s-target)%2 == 0 {
137+
break
138+
}
139+
k++
140+
s += k
141+
}
142+
return k
143+
}
72144
```
73145

74146
### **...**

solution/0700-0799/0754.Reach a Number/README_EN.md

+63-1
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,75 @@ On the 2<sup>nd</sup> move, we step from 1 to 3 (2 steps).
5252
### **Python3**
5353

5454
```python
55-
55+
class Solution:
56+
def reachNumber(self, target: int) -> int:
57+
target = abs(target)
58+
k = s = 0
59+
while 1:
60+
if s >= target and (s - target) % 2 == 0:
61+
break
62+
k += 1
63+
s += k
64+
return k
5665
```
5766

5867
### **Java**
5968

6069
```java
70+
class Solution {
71+
public int reachNumber(int target) {
72+
target = Math.abs(target);
73+
int s = 0;
74+
int k = 0;
75+
while (true) {
76+
if (s >= target && (s - target) % 2 == 0) {
77+
break;
78+
}
79+
++k;
80+
s += k;
81+
}
82+
return k;
83+
}
84+
}
85+
```
86+
87+
### **C++**
88+
89+
```cpp
90+
class Solution {
91+
public:
92+
int reachNumber(int target) {
93+
target = abs(target);
94+
int s = 0, k = 0;
95+
while (true) {
96+
if (s >= target && (s - target) % 2 == 0) {
97+
break;
98+
}
99+
++k;
100+
s += k;
101+
}
102+
return k;
103+
}
104+
};
105+
```
61106
107+
### **Go**
108+
109+
```go
110+
func reachNumber(target int) int {
111+
s, k := 0, 0
112+
if target < 0 {
113+
target = -target
114+
}
115+
for {
116+
if s >= target && (s-target)%2 == 0 {
117+
break
118+
}
119+
k++
120+
s += k
121+
}
122+
return k
123+
}
62124
```
63125

64126
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int reachNumber(int target) {
4+
target = abs(target);
5+
int s = 0, k = 0;
6+
while (true) {
7+
if (s >= target && (s - target) % 2 == 0) {
8+
break;
9+
}
10+
++k;
11+
s += k;
12+
}
13+
return k;
14+
}
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
func reachNumber(target int) int {
2+
s, k := 0, 0
3+
if target < 0 {
4+
target = -target
5+
}
6+
for {
7+
if s >= target && (s-target)%2 == 0 {
8+
break
9+
}
10+
k++
11+
s += k
12+
}
13+
return k
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int reachNumber(int target) {
3+
target = Math.abs(target);
4+
int s = 0;
5+
int k = 0;
6+
while (true) {
7+
if (s >= target && (s - target) % 2 == 0) {
8+
break;
9+
}
10+
++k;
11+
s += k;
12+
}
13+
return k;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def reachNumber(self, target: int) -> int:
3+
target = abs(target)
4+
k = s = 0
5+
while 1:
6+
if s >= target and (s - target) % 2 == 0:
7+
break
8+
k += 1
9+
s += k
10+
return k

0 commit comments

Comments
 (0)