bobo老师可以麻烦您帮我看下341题的解答有什么问题吗?
来源:6-3 运用栈模拟递归
慕斯902xzxc_das
2021-12-15
因为调试需要其它几个辅助类,但是我不太清楚应该怎么设计,所以没办法进行调试。然后我看了下题解的思路好像跟我的代码差不多,但是我的输出的结果就是有问题。
public class NestedIterator implements Iterator<Integer> {
private Deque<Integer> queue = new LinkedList<>();
public NestedIterator(List<NestedInteger> nestedList) {
addIntInQueue(nestedList);
}
private void addIntInQueue(List<NestedInteger> nestedList) {
for(int i = 0; i < nestedList.size(); i++) {
NestedInteger NI = nestedList.get(i);
if(NI.isInteger()) {
queue.offer(NI.getInteger());
} else {
addIntInQueue(NI.getList());
}
}
}
@Override
public Integer next() {
return queue.poll();
}
@Override
public boolean hasNext() {
return queue.isEmpty();
}
}
输出结果:
写回答
1回答
-
你的整体思路是没有问题的。我觉得是 Leetcode 的测试调用有 bug(或者题目没有说明白)。你的调用只支持一轮调用,然后 queue 就空了。但如果换成下面的代码(我基于你的代码修改的),每次调用不把元素删出去,就能 ac。
我暂时觉得这是 Leetcode 的问题,你可以给他们提反馈。
public class NestedIterator implements Iterator<Integer> { private ArrayList<Integer> list = new ArrayList<>(); int i = 0; public NestedIterator(List<NestedInteger> nestedList) { addIntInQueue(nestedList); } private void addIntInQueue(List<NestedInteger> nestedList) { for(int i = 0; i < nestedList.size(); i++) { NestedInteger NI = nestedList.get(i); if(NI.isInteger()) { list.add(NI.getInteger()); } else { addIntInQueue(NI.getList()); } } } @Override public Integer next() { return list.get(i ++); } @Override public boolean hasNext() { return i < list.size(); } }
继续加油!:)
012021-12-16
相似问题