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 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

Lines changed: 70 additions & 3 deletions
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

Lines changed: 68 additions & 2 deletions
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
### **...**
Lines changed: 41 additions & 0 deletions
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+
*/
Lines changed: 27 additions & 0 deletions
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)

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