Skip to content

Commit 869bc30

Browse files
committed
flatten nestlist + minor refactorings: done
1 parent b449afd commit 869bc30

File tree

4 files changed

+117
-38
lines changed

4 files changed

+117
-38
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.leetcode.recursion;
2+
3+
import java.util.ArrayList;
4+
import java.util.Iterator;
5+
import java.util.List;
6+
7+
/**
8+
* Level: Medium
9+
* Link: https://leetcode.com/problems/flatten-nested-list-iterator/
10+
* Description:
11+
* Given a nested list of integers, implement an iterator to flatten it.
12+
*
13+
* Each element is either an integer, or a list -- whose elements may also be integers or other lists.
14+
*
15+
* Example 1:
16+
* Input: [[1,1],2,[1,1]]
17+
* Output: [1,1,2,1,1]
18+
* Explanation: By calling next repeatedly until hasNext returns false,
19+
* the order of elements returned by next should be: [1,1,2,1,1].
20+
*
21+
* Example 2:
22+
* Input: [1,[4,[6]]]
23+
* Output: [1,4,6]
24+
* Explanation: By calling next repeatedly until hasNext returns false,
25+
* the order of elements returned by next should be: [1,4,6].
26+
*
27+
* Runtime: <a href="https://leetcode.com/submissions/detail/250996020/">2 ms</a>.
28+
*
29+
* @author rampatra
30+
* @since 2019-08-12
31+
*/
32+
public class FlattenNestListIterator implements Iterator<Integer> {
33+
34+
private int index;
35+
private List<Integer> flattenedList;
36+
37+
public FlattenNestListIterator(List<NestedInteger> nestedList) {
38+
index = 0;
39+
flattenedList = getFlattenedList(nestedList);
40+
}
41+
42+
private List<Integer> getFlattenedList(List<NestedInteger> nestedList) {
43+
List<Integer> flattenedList = new ArrayList<>();
44+
45+
for (NestedInteger nestedInteger : nestedList) {
46+
if (nestedInteger.isInteger()) {
47+
flattenedList.add(nestedInteger.getInteger());
48+
} else {
49+
flattenedList.addAll(getFlattenedList(nestedInteger.getList()));
50+
}
51+
}
52+
53+
return flattenedList;
54+
}
55+
56+
@Override
57+
public Integer next() {
58+
return flattenedList.get(index++);
59+
}
60+
61+
@Override
62+
public boolean hasNext() {
63+
return index < flattenedList.size();
64+
}
65+
66+
public static void main(String[] args) {
67+
// TODO add some test cases
68+
}
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.leetcode.recursion;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* Class needed for various problems like {@link NestedListWeightSumII}, {@link FlattenNestListIterator}, etc.
8+
*
9+
* @author rampatra
10+
* @since 2019-08-12
11+
*/
12+
public class NestedInteger {
13+
14+
private Integer integer;
15+
private List<NestedInteger> list;
16+
17+
public NestedInteger() {
18+
this.list = new ArrayList<>();
19+
}
20+
21+
public NestedInteger(int integer) {
22+
this.integer = integer;
23+
this.list = new ArrayList<>();
24+
}
25+
26+
public boolean isInteger() {
27+
return this.integer != null;
28+
}
29+
30+
public Integer getInteger() {
31+
return integer;
32+
}
33+
34+
public void setInteger(Integer integer) {
35+
this.integer = integer;
36+
}
37+
38+
public List<NestedInteger> getList() {
39+
return list;
40+
}
41+
42+
public NestedInteger add(NestedInteger nestedInteger) {
43+
this.list.add(nestedInteger);
44+
return this;
45+
}
46+
}

src/main/java/com/leetcode/arrays/NestedListWeightSum.java renamed to src/main/java/com/leetcode/recursion/NestedListWeightSum.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.leetcode.arrays;
1+
package com.leetcode.recursion;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
44

src/main/java/com/leetcode/arrays/NestedListWeightSumII.java renamed to src/main/java/com/leetcode/recursion/NestedListWeightSumII.java

+1-37
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.leetcode.arrays;
1+
package com.leetcode.recursion;
22

33
import java.util.*;
44

@@ -77,40 +77,4 @@ public static void main(String[] args) {
7777

7878
assertEquals(17, nestedSum(Collections.singletonList(ni)));
7979
}
80-
}
81-
82-
class NestedInteger {
83-
84-
private Integer integer;
85-
private List<NestedInteger> list;
86-
87-
public NestedInteger() {
88-
this.list = new ArrayList<>();
89-
}
90-
91-
public NestedInteger(int integer) {
92-
this.integer = integer;
93-
this.list = new ArrayList<>();
94-
}
95-
96-
public boolean isInteger() {
97-
return this.integer != null;
98-
}
99-
100-
public Integer getInteger() {
101-
return integer;
102-
}
103-
104-
public void setInteger(Integer integer) {
105-
this.integer = integer;
106-
}
107-
108-
public List<NestedInteger> getList() {
109-
return list;
110-
}
111-
112-
public NestedInteger add(NestedInteger nestedInteger) {
113-
this.list.add(nestedInteger);
114-
return this;
115-
}
11680
}

0 commit comments

Comments
 (0)