
[LeetCode] Flatten Nested List Iterator

public class NestedIterator implements Iterator<Integer> {
List<Integer> nums = new ArrayList<>();
int now;
public NestedIterator(List<NestedInteger> nestedList) {
for(NestedInteger ni : nestedList) {
for(int n : ni) {
nums.add(n);
}
}
now = 0;
}
@Override
public Integer next() {
return nums.get(now++);
}
@Override
public boolean hasNext() {
if(now >= nums.size()) {
return false;
} else {
return true;
}
}
}
생성자에서 nums를 초기화하는 부분에서 문제가 발생했다.
NestedInteger는 복합 객체로 for (int n : ni)와 같은 단순 반복문으로 탐색이 불가능하다.NestedInteger일 수도 있기 때문에생성자
nestedList를 탐색한다.ni가 정수일 경우 값을 그대로 nums에 추가한다.next()
now를 정의한다.now를 증가시킨다.hasNext()
now가 nums의 크기보다 작으면 true를 반환하고, 그렇지 않으면 false를 반환한다.public class NestedIterator implements Iterator<Integer> {
List<Integer> nums = new ArrayList<>();
int now;
public NestedIterator(List<NestedInteger> nestedList) {
flattenList(nestedList);
now = 0;
}
private void flattenList(List<NestedInteger> nestedList) {
for (NestedInteger ni : nestedList) {
if (ni.isInteger()) {
nums.add(ni.getInteger());
} else {
flattenList(ni.getList());
}
}
}
@Override
public Integer next() {
return nums.get(now++);
}
@Override
public boolean hasNext() {
if(now >= nums.size()) {
return false;
} else {
return true;
}
}
}