Skip to content

Commit 75e26bb

Browse files
authored
feat: add rust solution to lc problem: No.0281 (#1302)
1 parent 6cd7bf2 commit 75e26bb

File tree

3 files changed

+169
-0
lines changed

3 files changed

+169
-0
lines changed

solution/0200-0299/0281.Zigzag Iterator/README.md

+58
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,64 @@ class ZigzagIterator:
7474
# while i.hasNext(): v.append(i.next())
7575
```
7676

77+
### **Rust**
78+
79+
```rust
80+
struct ZigzagIterator {
81+
v1: Vec<i32>,
82+
v2: Vec<i32>,
83+
/// `false` represents `v1`, `true` represents `v2`
84+
flag: bool,
85+
}
86+
87+
impl ZigzagIterator {
88+
fn new(v1: Vec<i32>, v2: Vec<i32>) -> Self {
89+
Self {
90+
v1,
91+
v2,
92+
// Initially beginning with `v1`
93+
flag: false,
94+
}
95+
}
96+
97+
fn next(&mut self) -> i32 {
98+
if !self.flag {
99+
// v1
100+
if self.v1.is_empty() && !self.v2.is_empty() {
101+
self.flag = true;
102+
let ret = self.v2.remove(0);
103+
return ret;
104+
}
105+
if self.v2.is_empty() {
106+
let ret = self.v1.remove(0);
107+
return ret;
108+
}
109+
let ret = self.v1.remove(0);
110+
self.flag = true;
111+
return ret;
112+
} else {
113+
// v2
114+
if self.v2.is_empty() && !self.v1.is_empty() {
115+
self.flag = false;
116+
let ret = self.v1.remove(0);
117+
return ret;
118+
}
119+
if self.v1.is_empty() {
120+
let ret = self.v2.remove(0);
121+
return ret;
122+
}
123+
let ret = self.v2.remove(0);
124+
self.flag = false;
125+
return ret;
126+
}
127+
}
128+
129+
fn has_next(&self) -> bool {
130+
!self.v1.is_empty() || !self.v2.is_empty()
131+
}
132+
}
133+
```
134+
77135
### **Java**
78136

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

solution/0200-0299/0281.Zigzag Iterator/README_EN.md

+58
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,64 @@ class ZigzagIterator:
9696
# while i.hasNext(): v.append(i.next())
9797
```
9898

99+
### **Rust**
100+
101+
```rust
102+
struct ZigzagIterator {
103+
v1: Vec<i32>,
104+
v2: Vec<i32>,
105+
/// `false` represents `v1`, `true` represents `v2`
106+
flag: bool,
107+
}
108+
109+
impl ZigzagIterator {
110+
fn new(v1: Vec<i32>, v2: Vec<i32>) -> Self {
111+
Self {
112+
v1,
113+
v2,
114+
// Initially beginning with `v1`
115+
flag: false,
116+
}
117+
}
118+
119+
fn next(&mut self) -> i32 {
120+
if !self.flag {
121+
// v1
122+
if self.v1.is_empty() && !self.v2.is_empty() {
123+
self.flag = true;
124+
let ret = self.v2.remove(0);
125+
return ret;
126+
}
127+
if self.v2.is_empty() {
128+
let ret = self.v1.remove(0);
129+
return ret;
130+
}
131+
let ret = self.v1.remove(0);
132+
self.flag = true;
133+
return ret;
134+
} else {
135+
// v2
136+
if self.v2.is_empty() && !self.v1.is_empty() {
137+
self.flag = false;
138+
let ret = self.v1.remove(0);
139+
return ret;
140+
}
141+
if self.v1.is_empty() {
142+
let ret = self.v2.remove(0);
143+
return ret;
144+
}
145+
let ret = self.v2.remove(0);
146+
self.flag = false;
147+
return ret;
148+
}
149+
}
150+
151+
fn has_next(&self) -> bool {
152+
!self.v1.is_empty() || !self.v2.is_empty()
153+
}
154+
}
155+
```
156+
99157
### **Java**
100158

101159
```java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
struct ZigzagIterator {
2+
v1: Vec<i32>,
3+
v2: Vec<i32>,
4+
/// `false` represents `v1`, `true` represents `v2`
5+
flag: bool,
6+
}
7+
8+
impl ZigzagIterator {
9+
fn new(v1: Vec<i32>, v2: Vec<i32>) -> Self {
10+
Self {
11+
v1,
12+
v2,
13+
// Initially beginning with `v1`
14+
flag: false,
15+
}
16+
}
17+
18+
fn next(&mut self) -> i32 {
19+
if !self.flag {
20+
// v1
21+
if self.v1.is_empty() && !self.v2.is_empty() {
22+
self.flag = true;
23+
let ret = self.v2.remove(0);
24+
return ret;
25+
}
26+
if self.v2.is_empty() {
27+
let ret = self.v1.remove(0);
28+
return ret;
29+
}
30+
let ret = self.v1.remove(0);
31+
self.flag = true;
32+
return ret;
33+
} else {
34+
// v2
35+
if self.v2.is_empty() && !self.v1.is_empty() {
36+
self.flag = false;
37+
let ret = self.v1.remove(0);
38+
return ret;
39+
}
40+
if self.v1.is_empty() {
41+
let ret = self.v2.remove(0);
42+
return ret;
43+
}
44+
let ret = self.v2.remove(0);
45+
self.flag = false;
46+
return ret;
47+
}
48+
}
49+
50+
fn has_next(&self) -> bool {
51+
!self.v1.is_empty() || !self.v2.is_empty()
52+
}
53+
}

0 commit comments

Comments
 (0)