Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c0a0f90

Browse files
committed
feat: add solutions to lc problem: No.0754
No.0754.Reach a Number
1 parent ab41b45 commit c0a0f90

File tree

7 files changed

+86
-50
lines changed

7 files changed

+86
-50
lines changed

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

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,17 @@
5353

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

56-
**方法一:数学**
56+
**方法一:数学分析**
5757

58-
由于对称性,我们将 `target` 统计取绝对值
58+
由于对称性,每次可以选择向左或向右移动,因此,我们可以将 $target$ 统一取绝对值
5959

60-
定义 `s`,一直循环累加,直至满足 $s\ge target$ 并且 $(s-target)\mod 2 = 0$。返回循环次数即可
60+
定义 $s$ 表示当前所处的位置,用变量 $k$ 记录移动的次数。初始时 $s$ 和 $k$ 均为 0ドル$
6161

62-
证明:如果 $s\ge target$ $(s-target)\mod 2 = 0,ドル那么只需要把前面 $(s-target)/2$ 这个数变为负数即可
62+
我们将 $s$ 一直循环累加,直到满足 $s\ge target$ 并且 $(s-target)\mod 2 = 0,ドル此时的移动次数 $k$ 就是答案,直接返回
6363

64-
时间复杂度 $O(\sqrt{target})$。
64+
为什么?因为如果 $s\ge target$ 且 $(s-target)\mod 2 = 0,ドル我们只需要把前面 $\frac{s-target}{2}$ 这个正整数变为负数,就能使得 $s$ 与 $target$ 相等。正整数变负数的过程,实际上是将移动的方向改变,但实际移动次数仍然不变。
65+
66+
时间复杂度 $O(\sqrt{\left | target \right | }),ドル空间复杂度 $O(1)$。
6567

6668
<!-- tabs:start -->
6769

@@ -73,13 +75,12 @@
7375
class Solution:
7476
def reachNumber(self, target: int) -> int:
7577
target = abs(target)
76-
k = s = 0
78+
s = k = 0
7779
while 1:
7880
if s >= target and (s - target) % 2 == 0:
79-
break
81+
return k
8082
k += 1
8183
s += k
82-
return k
8384
```
8485

8586
### **Java**
@@ -90,16 +91,14 @@ class Solution:
9091
class Solution {
9192
public int reachNumber(int target) {
9293
target = Math.abs(target);
93-
int s = 0;
94-
int k = 0;
94+
int s = 0, k = 0;
9595
while (true) {
9696
if (s >= target && (s - target) % 2 == 0) {
97-
break;
97+
return k;
9898
}
9999
++k;
100100
s += k;
101101
}
102-
return k;
103102
}
104103
}
105104
```
@@ -112,14 +111,11 @@ public:
112111
int reachNumber(int target) {
113112
target = abs(target);
114113
int s = 0, k = 0;
115-
while (true) {
116-
if (s >= target && (s - target) % 2 == 0) {
117-
break;
118-
}
114+
while (1) {
115+
if (s >= target && (s - target) % 2 == 0) return k;
119116
++k;
120117
s += k;
121118
}
122-
return k;
123119
}
124120
};
125121
```
@@ -128,21 +124,40 @@ public:
128124
129125
```go
130126
func reachNumber(target int) int {
131-
s, k := 0, 0
132127
if target < 0 {
133128
target = -target
134129
}
130+
var s, k int
135131
for {
136132
if s >= target && (s-target)%2 == 0 {
137-
break
133+
return k
138134
}
139135
k++
140136
s += k
141137
}
142-
return k
143138
}
144139
```
145140

141+
### **JavaScript**
142+
143+
```js
144+
/**
145+
* @param {number} target
146+
* @return {number}
147+
*/
148+
var reachNumber = function (target) {
149+
target = Math.abs(target);
150+
let [s, k] = [0, 0];
151+
while (1) {
152+
if (s >= target && (s - target) % 2 == 0) {
153+
return k;
154+
}
155+
++k;
156+
s += k;
157+
}
158+
};
159+
```
160+
146161
### **...**
147162

148163
```

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

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,12 @@ On the 2<sup>nd</sup> move, we step from 1 to 3 (2 steps).
5555
class Solution:
5656
def reachNumber(self, target: int) -> int:
5757
target = abs(target)
58-
k = s = 0
58+
s = k = 0
5959
while 1:
6060
if s >= target and (s - target) % 2 == 0:
61-
break
61+
return k
6262
k += 1
6363
s += k
64-
return k
6564
```
6665

6766
### **Java**
@@ -70,16 +69,14 @@ class Solution:
7069
class Solution {
7170
public int reachNumber(int target) {
7271
target = Math.abs(target);
73-
int s = 0;
74-
int k = 0;
72+
int s = 0, k = 0;
7573
while (true) {
7674
if (s >= target && (s - target) % 2 == 0) {
77-
break;
75+
return k;
7876
}
7977
++k;
8078
s += k;
8179
}
82-
return k;
8380
}
8481
}
8582
```
@@ -92,14 +89,11 @@ public:
9289
int reachNumber(int target) {
9390
target = abs(target);
9491
int s = 0, k = 0;
95-
while (true) {
96-
if (s >= target && (s - target) % 2 == 0) {
97-
break;
98-
}
92+
while (1) {
93+
if (s >= target && (s - target) % 2 == 0) return k;
9994
++k;
10095
s += k;
10196
}
102-
return k;
10397
}
10498
};
10599
```
@@ -108,21 +102,40 @@ public:
108102
109103
```go
110104
func reachNumber(target int) int {
111-
s, k := 0, 0
112105
if target < 0 {
113106
target = -target
114107
}
108+
var s, k int
115109
for {
116110
if s >= target && (s-target)%2 == 0 {
117-
break
111+
return k
118112
}
119113
k++
120114
s += k
121115
}
122-
return k
123116
}
124117
```
125118

119+
### **JavaScript**
120+
121+
```js
122+
/**
123+
* @param {number} target
124+
* @return {number}
125+
*/
126+
var reachNumber = function (target) {
127+
target = Math.abs(target);
128+
let [s, k] = [0, 0];
129+
while (1) {
130+
if (s >= target && (s - target) % 2 == 0) {
131+
return k;
132+
}
133+
++k;
134+
s += k;
135+
}
136+
};
137+
```
138+
126139
### **...**
127140

128141
```

‎solution/0700-0799/0754.Reach a Number/Solution.cpp‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@ class Solution {
33
int reachNumber(int target) {
44
target = abs(target);
55
int s = 0, k = 0;
6-
while (true) {
7-
if (s >= target && (s - target) % 2 == 0) {
8-
break;
9-
}
6+
while (1) {
7+
if (s >= target && (s - target) % 2 == 0) return k;
108
++k;
119
s += k;
1210
}
13-
return k;
1411
}
1512
};
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
func reachNumber(target int) int {
2-
s, k := 0, 0
32
if target < 0 {
43
target = -target
54
}
5+
var s, k int
66
for {
77
if s >= target && (s-target)%2 == 0 {
8-
break
8+
returnk
99
}
1010
k++
1111
s += k
1212
}
13-
return k
1413
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
class Solution {
22
public int reachNumber(int target) {
33
target = Math.abs(target);
4-
int s = 0;
5-
int k = 0;
4+
int s = 0, k = 0;
65
while (true) {
76
if (s >= target && (s - target) % 2 == 0) {
8-
break;
7+
returnk;
98
}
109
++k;
1110
s += k;
1211
}
13-
return k;
1412
}
1513
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @param {number} target
3+
* @return {number}
4+
*/
5+
var reachNumber = function (target) {
6+
target = Math.abs(target);
7+
let [s, k] = [0, 0];
8+
while (1) {
9+
if (s >= target && (s - target) % 2 == 0) {
10+
return k;
11+
}
12+
++k;
13+
s += k;
14+
}
15+
};
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Solution:
22
def reachNumber(self, target: int) -> int:
33
target = abs(target)
4-
k = s = 0
4+
s = k = 0
55
while 1:
66
if s >= target and (s - target) % 2 == 0:
7-
break
7+
returnk
88
k += 1
99
s += k
10-
return k

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /