摘要:設(shè)計(jì)一個(gè)迭代器,使其能夠遍歷這個(gè)整型列表中的所有整數(shù)。列表中的項(xiàng)或者為一個(gè)整數(shù),或者是另一個(gè)列表。示例輸入輸出解釋通過重復(fù)調(diào)用直到返回,返回的元素的順序應(yīng)該是。
Description
Given a nested list of integers, implement an iterator to flatten it.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Example 1:
Input: [[1,1],2,[1,1]]
Output: [1,1,2,1,1]
Explanation: By calling next repeatedly until hasNext returns false,
the order of elements returned by next should be: [1,1,2,1,1].
Example 2:
Input: [1,[4,[6]]]
Output: [1,4,6]
Explanation: By calling next repeatedly until hasNext returns false,
the order of elements returned by next should be: [1,4,6].描述
給定一個(gè)嵌套的整型列表。設(shè)計(jì)一個(gè)迭代器,使其能夠遍歷這個(gè)整型列表中的所有整數(shù)。
列表中的項(xiàng)或者為一個(gè)整數(shù),或者是另一個(gè)列表。
示例 1:
輸入: [[1,1],2,[1,1]]
輸出: [1,1,2,1,1]
解釋: 通過重復(fù)調(diào)用 next 直到 hasNext 返回false,next 返回的元素的順序應(yīng)該是: [1,1,2,1,1]。
示例 2:
輸入: [1,[4,[6]]]
輸出: [1,4,6]
解釋: 通過重復(fù)調(diào)用 next 直到 hasNext 返回false,next 返回的元素的順序應(yīng)該是: [1,4,6]。
遞歸遍歷,使用雙端隊(duì)列,取出每一個(gè)元素,放入到隊(duì)列中
如果當(dāng)前的元素是整型(使用自帶的 isInteger 方法),將當(dāng)前元素放入到隊(duì)列中,如果是 List,遞歸調(diào)用當(dāng)前函數(shù)。
next 方法從隊(duì)列中不斷取出元素
# -*- coding: utf-8 -*- # @Author: 何睿 # @Create Date: 2019-04-08 14:01:53 # @Last Modified by: 何睿 # @Last Modified time: 2019-04-08 14:45:23 from collections import deque class NestedIterator(object): def __init__(self, nestedList): """ Initialize your data structure here. :type nestedList: List[NestedInteger] """ self.queue = deque() # 遍歷得到所有的元素 self._get_elements(nestedList) # 統(tǒng)計(jì)元素的個(gè)數(shù) self.count = len(self.queue) def _get_elements(self, nestedList): for item in nestedList: # isInteger 方法是 NestedIterator 類提供的方法 # 如果是整型,將該數(shù)組添加到雙端隊(duì)列中 if item.isInteger(): self.queue.append(item.getInteger()) # 如果是一個(gè) List ,遞歸調(diào)用 _get_elements else: self._get_elements(item.getList()) return def next(self): """ :rtype: int """ hasnext = self.hasNext() if hasnext: self.count -= 1 # 返回下一個(gè)元素 return self.queue.popleft() return False def hasNext(self): """ :rtype: bool """ return self.count > 0
源代碼文件在 這里 。
?本文首發(fā)于 何睿的博客 ,歡迎轉(zhuǎn)載,轉(zhuǎn)載需保留 文章來(lái)源 ,作者信息和本聲明.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/43534.html
摘要:題目要求假設(shè)有一個(gè)嵌套形式的數(shù)組,要求按照順序遍歷數(shù)組中的元素。思路和代碼首先可以想到通過深度優(yōu)先遞歸的方式將嵌套形式的數(shù)組展開為一個(gè)無(wú)嵌套的列表。 題目要求 Given a nested list of integers, implement an iterator to flatten it. Each element is either an integer, or a lis...
摘要:返回的是表示是否走到了結(jié)尾。起到的就是緩存作用,因?yàn)檎{(diào)用之后馬上就走到下一個(gè)了。如果調(diào)用,返回用得到和最初的輸入相同的做相同的步驟存入不斷拆開得到結(jié)果。思想就是來(lái)自括號(hào),后面也會(huì)跟進(jìn)的專題 Iterator其實(shí)就是一個(gè)單鏈表,無(wú)法回頭看。java里很多數(shù)據(jù)結(jié)構(gòu)都有這個(gè)接口,使用時(shí)需要initalize,得到一個(gè)iterator. 調(diào)用next()返回的是一個(gè)object, 指向的是下一...
摘要:首先,根據(jù)迭代器需要不斷返回下一個(gè)元素,確定用堆棧來(lái)做。堆棧初始化數(shù)據(jù)結(jié)構(gòu),要先從后向前向堆棧壓入中的元素。在調(diào)用之前,先要用判斷下一個(gè)是還是,并進(jìn)行的操作對(duì)要展開并順序壓入對(duì)直接返回。 Problem Given a nested list of integers, implement an iterator to flatten it. Each element is either...
摘要:另一個(gè)則是的迭代器,它負(fù)責(zé)記錄當(dāng)前到哪一個(gè)的迭代器了。每次時(shí),我們先調(diào)用一下,確保當(dāng)前的迭代器有下一個(gè)值。代碼當(dāng)前列表的迭代器為空,或者當(dāng)前迭代器中沒有下一個(gè)值時(shí),需要更新為下一個(gè)迭代器 Flatten 2D Vector Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ ...
Problem Implement an iterator to flatten a 2d vector. Example: Input: 2d vector = [ [1,2], [3], [4,5,6] ] Output: [1,2,3,4,5,6] Explanation: By calling next repeatedly until hasNext returns fals...
閱讀 1652·2021-10-14 09:42
閱讀 3917·2021-09-07 09:59
閱讀 1373·2019-08-30 15:55
閱讀 641·2019-08-30 11:17
閱讀 3403·2019-08-29 16:06
閱讀 573·2019-08-29 14:06
閱讀 3200·2019-08-28 18:14
閱讀 3720·2019-08-26 13:55