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

liuyubobobo

2021-12-16

你的整体思路是没有问题的。我觉得是 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();
    }
}


继续加油!:)

0
1
慕斯902xzxc_das
谢谢bobo老师~!
2021-12-16
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程