dfs双端队列
难度中等
题目描述
给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。
列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。
示例 1:
输入: [[1,1],2,[1,1]]
输出: [1,1,2,1,1]
解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-nested-list-iterator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
DFS + 队列
由于存在嵌套,比较简单的做法是通过 DFS 进行处理,将元素都放至队列。
Code
public interface NestedInteger {// @return true if this NestedInteger holds a single integer, rather than a nested list.public boolean isInteger();// @return the single integer that this NestedInteger holds, if it holds a single integer// Return null if this NestedInteger holds a nested listpublic Integer getInteger();// @return the nested list that this NestedInteger holds, if it holds a nested list// Return null if this NestedInteger holds a single integerpublic List<NestedInteger> getList();}/*** 341. 扁平化嵌套列表迭代器* 难度 中等*/public class NestedIterator implements Iterator<Integer> {Deque<Integer> queue = new ArrayDeque<>();public NestedIterator(List<NestedInteger> nestedList) {dfs(nestedList);}@Overridepublic Integer next() {return hasNext() ? queue.pollFirst() : -1;}@Overridepublic boolean hasNext() {return !queue.isEmpty();}void dfs(List<NestedInteger> list) {for (NestedInteger item : list) {if (item.isInteger()) {queue.addLast(item.getInteger());} else {dfs(item.getList());}}}}
