Skip to content

Commit b1d8547

Browse files
authored
feat: add rust solution for lc No.1871 (#5233)
1 parent 1f70d56 commit b1d8547

4 files changed

Lines changed: 97 additions & 12 deletions

File tree

solution/1800-1899/1871.Jump Game VII/README.md

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,9 @@ class Solution {
125125
public:
126126
bool canReach(string s, int minJump, int maxJump) {
127127
int n = s.size();
128-
int pre[n + 1];
129-
memset(pre, 0, sizeof(pre));
128+
vector<int> pre(n + 1);
130129
pre[1] = 1;
131-
bool f[n];
132-
memset(f, 0, sizeof(f));
130+
vector<bool> f(n);
133131
f[0] = true;
134132
for (int i = 1; i < n; ++i) {
135133
if (s[i] == '0') {
@@ -187,6 +185,38 @@ function canReach(s: string, minJump: number, maxJump: number): boolean {
187185
}
188186
```
189187

188+
#### Rust
189+
190+
```rust
191+
impl Solution {
192+
pub fn can_reach(s: String, min_jump: i32, max_jump: i32) -> bool {
193+
let s = s.as_bytes();
194+
let n = s.len();
195+
let min_jump = min_jump as usize;
196+
let max_jump = max_jump as usize;
197+
198+
let mut pre = vec![0; n + 1];
199+
pre[1] = 1;
200+
201+
let mut f = vec![false; n];
202+
f[0] = true;
203+
204+
for i in 1..n {
205+
if s[i] == b'0' {
206+
let l = i.saturating_sub(max_jump);
207+
if i >= min_jump {
208+
let r = i - min_jump;
209+
f[i] = l <= r && pre[r + 1] - pre[l] > 0;
210+
}
211+
}
212+
pre[i + 1] = pre[i] + if f[i] { 1 } else { 0 };
213+
}
214+
215+
f[n - 1]
216+
}
217+
}
218+
```
219+
190220
#### JavaScript
191221

192222
```js

solution/1800-1899/1871.Jump Game VII/README_EN.md

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,9 @@ class Solution {
123123
public:
124124
bool canReach(string s, int minJump, int maxJump) {
125125
int n = s.size();
126-
int pre[n + 1];
127-
memset(pre, 0, sizeof(pre));
126+
vector<int> pre(n + 1);
128127
pre[1] = 1;
129-
bool f[n];
130-
memset(f, 0, sizeof(f));
128+
vector<bool> f(n);
131129
f[0] = true;
132130
for (int i = 1; i < n; ++i) {
133131
if (s[i] == '0') {
@@ -185,6 +183,38 @@ function canReach(s: string, minJump: number, maxJump: number): boolean {
185183
}
186184
```
187185

186+
#### Rust
187+
188+
```rust
189+
impl Solution {
190+
pub fn can_reach(s: String, min_jump: i32, max_jump: i32) -> bool {
191+
let s = s.as_bytes();
192+
let n = s.len();
193+
let min_jump = min_jump as usize;
194+
let max_jump = max_jump as usize;
195+
196+
let mut pre = vec![0; n + 1];
197+
pre[1] = 1;
198+
199+
let mut f = vec![false; n];
200+
f[0] = true;
201+
202+
for i in 1..n {
203+
if s[i] == b'0' {
204+
let l = i.saturating_sub(max_jump);
205+
if i >= min_jump {
206+
let r = i - min_jump;
207+
f[i] = l <= r && pre[r + 1] - pre[l] > 0;
208+
}
209+
}
210+
pre[i + 1] = pre[i] + if f[i] { 1 } else { 0 };
211+
}
212+
213+
f[n - 1]
214+
}
215+
}
216+
```
217+
188218
#### JavaScript
189219

190220
```js

solution/1800-1899/1871.Jump Game VII/Solution.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ class Solution {
22
public:
33
bool canReach(string s, int minJump, int maxJump) {
44
int n = s.size();
5-
int pre[n + 1];
6-
memset(pre, 0, sizeof(pre));
5+
vector<int> pre(n + 1);
76
pre[1] = 1;
8-
bool f[n];
9-
memset(f, 0, sizeof(f));
7+
vector<bool> f(n);
108
f[0] = true;
119
for (int i = 1; i < n; ++i) {
1210
if (s[i] == '0') {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
impl Solution {
2+
pub fn can_reach(s: String, min_jump: i32, max_jump: i32) -> bool {
3+
let s = s.as_bytes();
4+
let n = s.len();
5+
let min_jump = min_jump as usize;
6+
let max_jump = max_jump as usize;
7+
8+
let mut pre = vec![0; n + 1];
9+
pre[1] = 1;
10+
11+
let mut f = vec![false; n];
12+
f[0] = true;
13+
14+
for i in 1..n {
15+
if s[i] == b'0' {
16+
let l = i.saturating_sub(max_jump);
17+
if i >= min_jump {
18+
let r = i - min_jump;
19+
f[i] = l <= r && pre[r + 1] - pre[l] > 0;
20+
}
21+
}
22+
pre[i + 1] = pre[i] + if f[i] { 1 } else { 0 };
23+
}
24+
25+
f[n - 1]
26+
}
27+
}

0 commit comments

Comments
 (0)