Skip to content

Commit 09a0eb6

Browse files
committed
feat: add solutions to leetcode problem: No.0281. Zigzag Iterator
1 parent 2828902 commit 09a0eb6

File tree

4 files changed

+206
-5
lines changed

4 files changed

+206
-5
lines changed

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

+70-3
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,94 @@ v2 = [3,4,5,6]
3232
<strong>输出: </strong><code>[1,4,8,2,5,9,3,6,7]</code>.
3333
</pre>
3434

35-
3635
## 解法
3736

3837
<!-- 这里可写通用的实现逻辑 -->
3938

39+
定义 vectors 列表保存输入的所有一维向量,indexes 表示 vectors 列表每一项当前所遍历到的下标位置,cur 表示当前遍历到的 vector 列表,而 size 表示 vectors 列表元素个数。具体实现参考以下代码实现。
40+
4041
<!-- tabs:start -->
4142

4243
### **Python3**
4344

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

4647
```python
47-
48+
class ZigzagIterator:
49+
def __init__(self, v1: List[int], v2: List[int]):
50+
self.cur = 0
51+
self.size = 2
52+
self.indexes = [0] * self.size
53+
self.vectors = [v1, v2]
54+
55+
def next(self) -> int:
56+
vector = self.vectors[self.cur]
57+
index = self.indexes[self.cur]
58+
res = vector[index]
59+
self.indexes[self.cur] = index + 1
60+
self.cur = (self.cur + 1) % self.size
61+
return res
62+
63+
def hasNext(self) -> bool:
64+
start = self.cur
65+
while self.indexes[self.cur] == len(self.vectors[self.cur]):
66+
self.cur = (self.cur + 1) % self.size
67+
if self.cur == start:
68+
return False
69+
return True
70+
71+
72+
# Your ZigzagIterator object will be instantiated and called as such:
73+
# i, v = ZigzagIterator(v1, v2), []
74+
# while i.hasNext(): v.append(i.next())
4875
```
4976

5077
### **Java**
5178

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

5481
```java
55-
82+
public class ZigzagIterator {
83+
private int cur;
84+
private int size;
85+
private List<Integer> indexes = new ArrayList<>();
86+
private List<List<Integer>> vectors = new ArrayList<>();
87+
88+
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
89+
cur = 0;
90+
size = 2;
91+
indexes.add(0);
92+
indexes.add(0);
93+
vectors.add(v1);
94+
vectors.add(v2);
95+
}
96+
97+
public int next() {
98+
List<Integer> vector = vectors.get(cur);
99+
int index = indexes.get(cur);
100+
int res = vector.get(index);
101+
indexes.set(cur, index + 1);
102+
cur = (cur + 1) % size;
103+
return res;
104+
}
105+
106+
public boolean hasNext() {
107+
int start = cur;
108+
while (indexes.get(cur) == vectors.get(cur).size()) {
109+
cur = (cur + 1) % size;
110+
if (start == cur) {
111+
return false;
112+
}
113+
}
114+
return true;
115+
}
116+
}
117+
118+
/**
119+
* Your ZigzagIterator object will be instantiated and called as such:
120+
* ZigzagIterator i = new ZigzagIterator(v1, v2);
121+
* while (i.hasNext()) v[f()] = i.next();
122+
*/
56123
```
57124

58125
### **...**

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

+68-2
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,79 @@
6868
### **Python3**
6969

7070
```python
71-
71+
class ZigzagIterator:
72+
def __init__(self, v1: List[int], v2: List[int]):
73+
self.cur = 0
74+
self.size = 2
75+
self.indexes = [0] * self.size
76+
self.vectors = [v1, v2]
77+
78+
def next(self) -> int:
79+
vector = self.vectors[self.cur]
80+
index = self.indexes[self.cur]
81+
res = vector[index]
82+
self.indexes[self.cur] = index + 1
83+
self.cur = (self.cur + 1) % self.size
84+
return res
85+
86+
def hasNext(self) -> bool:
87+
start = self.cur
88+
while self.indexes[self.cur] == len(self.vectors[self.cur]):
89+
self.cur = (self.cur + 1) % self.size
90+
if self.cur == start:
91+
return False
92+
return True
93+
94+
95+
# Your ZigzagIterator object will be instantiated and called as such:
96+
# i, v = ZigzagIterator(v1, v2), []
97+
# while i.hasNext(): v.append(i.next())
7298
```
7399

74100
### **Java**
75101

76102
```java
77-
103+
public class ZigzagIterator {
104+
private int cur;
105+
private int size;
106+
private List<Integer> indexes = new ArrayList<>();
107+
private List<List<Integer>> vectors = new ArrayList<>();
108+
109+
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
110+
cur = 0;
111+
size = 2;
112+
indexes.add(0);
113+
indexes.add(0);
114+
vectors.add(v1);
115+
vectors.add(v2);
116+
}
117+
118+
public int next() {
119+
List<Integer> vector = vectors.get(cur);
120+
int index = indexes.get(cur);
121+
int res = vector.get(index);
122+
indexes.set(cur, index + 1);
123+
cur = (cur + 1) % size;
124+
return res;
125+
}
126+
127+
public boolean hasNext() {
128+
int start = cur;
129+
while (indexes.get(cur) == vectors.get(cur).size()) {
130+
cur = (cur + 1) % size;
131+
if (start == cur) {
132+
return false;
133+
}
134+
}
135+
return true;
136+
}
137+
}
138+
139+
/**
140+
* Your ZigzagIterator object will be instantiated and called as such:
141+
* ZigzagIterator i = new ZigzagIterator(v1, v2);
142+
* while (i.hasNext()) v[f()] = i.next();
143+
*/
78144
```
79145

80146
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
public class ZigzagIterator {
2+
private int cur;
3+
private int size;
4+
private List<Integer> indexes = new ArrayList<>();
5+
private List<List<Integer>> vectors = new ArrayList<>();
6+
7+
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
8+
cur = 0;
9+
size = 2;
10+
indexes.add(0);
11+
indexes.add(0);
12+
vectors.add(v1);
13+
vectors.add(v2);
14+
}
15+
16+
public int next() {
17+
List<Integer> vector = vectors.get(cur);
18+
int index = indexes.get(cur);
19+
int res = vector.get(index);
20+
indexes.set(cur, index + 1);
21+
cur = (cur + 1) % size;
22+
return res;
23+
}
24+
25+
public boolean hasNext() {
26+
int start = cur;
27+
while (indexes.get(cur) == vectors.get(cur).size()) {
28+
cur = (cur + 1) % size;
29+
if (start == cur) {
30+
return false;
31+
}
32+
}
33+
return true;
34+
}
35+
}
36+
37+
/**
38+
* Your ZigzagIterator object will be instantiated and called as such:
39+
* ZigzagIterator i = new ZigzagIterator(v1, v2);
40+
* while (i.hasNext()) v[f()] = i.next();
41+
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class ZigzagIterator:
2+
def __init__(self, v1: List[int], v2: List[int]):
3+
self.cur = 0
4+
self.size = 2
5+
self.indexes = [0] * self.size
6+
self.vectors = [v1, v2]
7+
8+
def next(self) -> int:
9+
vector = self.vectors[self.cur]
10+
index = self.indexes[self.cur]
11+
res = vector[index]
12+
self.indexes[self.cur] = index + 1
13+
self.cur = (self.cur + 1) % self.size
14+
return res
15+
16+
def hasNext(self) -> bool:
17+
start = self.cur
18+
while self.indexes[self.cur] == len(self.vectors[self.cur]):
19+
self.cur = (self.cur + 1) % self.size
20+
if self.cur == start:
21+
return False
22+
return True
23+
24+
25+
# Your ZigzagIterator object will be instantiated and called as such:
26+
# i, v = ZigzagIterator(v1, v2), []
27+
# while i.hasNext(): v.append(i.next())

0 commit comments

Comments
 (0)