给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。
列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。
示例 1:
输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。
示例 2:
输入: [1,[4,[6]]]输出: [1,4,6]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。
题解
没看懂什么意思啊!o(╥﹏╥)o,主要是没认真看
深度优先搜索
嵌套的整型结构是一个树形结构,树上叶子节点对应一个整数,非叶节点对应一个列表。在这棵树上深度优先搜索的顺序就是迭代器遍历的顺序。可以先遍历整个嵌套列表,将所有整数存入一个数组,然后遍历该数组从而实现next和hasNext方法
JavaScript
/*** // This is the interface that allows for creating nested lists.* // You should not implement it, or speculate about its implementation* function NestedInteger() {** Return true if this NestedInteger holds a single integer, rather than a nested list.* @return {boolean}* this.isInteger = function() {* ...* };** Return the single integer that this NestedInteger holds, if it holds a single integer* Return null if this NestedInteger holds a nested list* @return {integer}* this.getInteger = function() {* ...* };** Return the nested list that this NestedInteger holds, if it holds a nested list* Return null if this NestedInteger holds a single integer* @return {NestedInteger[]}* this.getList = function() {* ...* };* };*//*** @constructor* @param {NestedInteger[]} nestedList*/var NestedIterator = function(nestedList) {vals = [];const dfs = (nestedList) => {for (const nest of nestedList) {if (nest.isInteger()) {vals.push(nest.getInteger());} else {dfs(nest.getList());}}}dfs(nestedList);};/*** @this NestedIterator* @returns {boolean}*/NestedIterator.prototype.hasNext = function() {return vals.length > 0;};/*** @this NestedIterator* @returns {integer}*/NestedIterator.prototype.next = function() {const val = vals[0];vals = vals.slice(1);return val;};/*** Your NestedIterator will be called like this:* var i = new NestedIterator(nestedList), a = [];* while (i.hasNext()) a.push(i.next());*/
Python
# """# This is the interface that allows for creating nested lists.# You should not implement it, or speculate about its implementation# """#class NestedInteger:# def isInteger(self) -> bool:# """# @return True if this NestedInteger holds a single integer, rather than a nested list.# """## def getInteger(self) -> int:# """# @return the single integer that this NestedInteger holds, if it holds a single integer# Return None if this NestedInteger holds a nested list# """## def getList(self) -> [NestedInteger]:# """# @return the nested list that this NestedInteger holds, if it holds a nested list# Return None if this NestedInteger holds a single integer# """class NestedIterator:def __init__(self, nestedList: [NestedInteger]):self.values = []def dfs(list):for i in list:if i.isInteger():self.values.append(i.getInteger())else:dfs(i.getList())dfs(nestedList)def next(self) -> int:val = self.values[0]self.values = self.values[1:]return valdef hasNext(self) -> bool:return len(self.values) > 0# Your NestedIterator object will be instantiated and called as such:# i, v = NestedIterator(nestedList), []# while i.hasNext(): v.append(i.next())
复杂度分析
- 时间复杂度:初始化为
,next 和 hasNext 为
。其中 n 是嵌套的整型列表中的元素个数。
- 空间复杂度:
。需要一个数组存储嵌套的整型列表中的所有元素。
