摘要:題目要求假設(shè)有一個嵌套形式的數(shù)組,要求按照順序遍歷數(shù)組中的元素。思路和代碼首先可以想到通過深度優(yōu)先遞歸的方式將嵌套形式的數(shù)組展開為一個無嵌套的列表。
題目要求
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: Given the list [[1,1],2,[1,1]], By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,1,2,1,1]. Example 2: Given the list [1,[4,[6]]], By calling next repeatedly until hasNext returns false, the order of elements returned by next should be: [1,4,6].
假設(shè)有一個嵌套形式的數(shù)組,要求按照順序遍歷數(shù)組中的元素。
思路和代碼首先可以想到通過深度優(yōu)先遞歸的方式將嵌套形式的數(shù)組展開為一個無嵌套的列表。那么有沒有方法實現(xiàn)不將元素取出而是直接迭代的方式獲取下一個元素呢?這里采用了嵌套迭代器的方式進(jìn)行遍歷
public class FlattenNestedListIterator_341 implements Iterator{ private List nestedList; private Iterator iterator; private int next; private int index; public FlattenNestedListIterator_341(List nestedList){ this.nestedList = nestedList; } @Override public Integer next() { return next; } @Override public boolean hasNext() { if(iterator != null && iterator.hasNext()){ this.next = iterator.next(); return true; } if(index>=nestedList.size()){ return false; } NestedInteger n = nestedList.get(index++); if(n.isInteger()){ next = n.getInteger(); }else{ iterator = new FlattenNestedListIterator_341(n.getList()); if(iterator.hasNext()){ next = iterator.next(); }else{ return hasNext(); } } return true; } }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號!將會不定期的發(fā)放福利哦~s
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69315.html
摘要:返回的是表示是否走到了結(jié)尾。起到的就是緩存作用,因為調(diào)用之后馬上就走到下一個了。如果調(diào)用,返回用得到和最初的輸入相同的做相同的步驟存入不斷拆開得到結(jié)果。思想就是來自括號,后面也會跟進(jìn)的專題 Iterator其實就是一個單鏈表,無法回頭看。java里很多數(shù)據(jù)結(jié)構(gòu)都有這個接口,使用時需要initalize,得到一個iterator. 調(diào)用next()返回的是一個object, 指向的是下一...
摘要:設(shè)計一個迭代器,使其能夠遍歷這個整型列表中的所有整數(shù)。列表中的項或者為一個整數(shù),或者是另一個列表。示例輸入輸出解釋通過重復(fù)調(diào)用直到返回,返回的元素的順序應(yīng)該是。 Description Given a nested list of integers, implement an iterator to flatten it. Each element is either an integ...
摘要:首先,根據(jù)迭代器需要不斷返回下一個元素,確定用堆棧來做。堆棧初始化數(shù)據(jù)結(jié)構(gòu),要先從后向前向堆棧壓入中的元素。在調(diào)用之前,先要用判斷下一個是還是,并進(jìn)行的操作對要展開并順序壓入對直接返回。 Problem Given a nested list of integers, implement an iterator to flatten it. Each element is either...
摘要:另一個則是的迭代器,它負(fù)責(zé)記錄當(dāng)前到哪一個的迭代器了。每次時,我們先調(diào)用一下,確保當(dāng)前的迭代器有下一個值。代碼當(dāng)前列表的迭代器為空,或者當(dāng)前迭代器中沒有下一個值時,需要更新為下一個迭代器 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...
閱讀 779·2019-08-29 16:32
閱讀 847·2019-08-29 12:31
閱讀 3231·2019-08-26 18:26
閱讀 3169·2019-08-26 12:20
閱讀 1744·2019-08-26 12:00
閱讀 3015·2019-08-26 10:58
閱讀 2822·2019-08-23 17:08
閱讀 2318·2019-08-23 16:32