摘要:返回的是表示是否走到了結(jié)尾。起到的就是緩存作用,因為調(diào)用之后馬上就走到下一個了。如果調(diào)用,返回用得到和最初的輸入相同的做相同的步驟存入不斷拆開得到結(jié)果。思想就是來自括號,后面也會跟進的專題
Iterator其實就是一個單鏈表,無法回頭看。java里很多數(shù)據(jù)結(jié)構(gòu)都有這個接口,使用時需要initalize,得到一個iterator. 調(diào)用next()返回的是一個object, 指向的是下一個未訪問過的部分。 hasnext()返回的是boolean, 表示是否走到了結(jié)尾。
284 Peeking Iterator
class PeekingIterator implements Iterator{ Iterator iter; Integer next = null; // 起到的就是緩存作用,因為next()調(diào)用之后馬上就走到下一個object了。 public PeekingIterator(Iterator iterator) { // initialize any member here. iter = iterator; if(iter.hasNext()){ next = iter.next(); } } // Returns the next element in the iteration without advancing the iterator. public Integer peek() { return next; } // hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. @Override public Integer next() { Integer res = next; next = iter.hasNext() ? iter.next() : null; return res; } @Override public boolean hasNext() { return next != null; } }
281 Zigzag Iterator
public class ZigzagIterator { Queuelist; public ZigzagIterator(List v1, List v2) { list = new LinkedList (); if(!v1.isEmpty()) list.add(v1.iterator()); if(!v2.isEmpty()) list.add(v2.iterator()); // 如果給的是k個list, List > vs, 只需要把所有v1,v1...vk生成iterator放到q里 // for(List
v: List >) if(!v.isEmpty()) list.add(v.iterator()); } public int next() { Iterator iter = list.poll(); int res = (Integer) iter.next(); if(iter.hasNext()) list.offer(iter); return res; } public boolean hasNext() { return !list.isEmpty(); } }
Zigzag Iterator這個題目和merge k sorted list很像,design twitter用到的就是merge k sorted list的思想加上OOD,會另寫一篇。
173 BST Iterator
戳這里,BST inorder小專題。
bst iterator
341 Flatten Nested List Iterator
題目的意思定義了一個特殊的數(shù)據(jù)結(jié)構(gòu),用括號形成很多層,按從左到右的順序輸出。 括號是個強提示,要把括號里的東西拆開還保持原來的順序,就需要用stack處理。 [1,[4,[6]]] 存到stack里,變成|[4,[6]], [1]| 棧頂調(diào)用isInteger(),返回true, 就要getInteger()輸出。 如果調(diào)用isInteger(),返回false, 用getList()得到和最初的輸入相同的list,做相同的步驟存入stack. 不斷拆開NestedInteger, 得到結(jié)果。 這題就是給的API有點多,需要讀懂題意,然后再拆開得到結(jié)果。stack思想就是來自括號,后面也會跟進stack的專題.
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * 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 list * public Integer getInteger(); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return null if this NestedInteger holds a single integer * public ListgetList(); * } */ public class NestedIterator implements Iterator { ArrayDeque stk; public NestedIterator(List nestedList) { stk = new ArrayDeque (); for(int i = nestedList.size()-1; i >= 0; i--){ stk.addLast(nestedList.get(i)); } } @Override public Integer next() { return stk.pollLast().getInteger(); } @Override public boolean hasNext() { while(!stk.isEmpty()){ NestedInteger cur = stk.peekLast(); if(cur.isInteger()){ return true; } List list = stk.pollLast().getList(); for(int i=list.size()-1; i>=0; i--){ stk.addLast(list.get(i)); } } return false; } }```
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66931.html
摘要:題目要求假設(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 lis...
摘要:設(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)用之前,先要用判斷下一個是還是,并進行的操作對要展開并順序壓入對直接返回。 Problem Given a nested list of integers, implement an iterator to flatten it. Each element is either...
摘要:迭代器迭代器在版本中被加入它為類序列對象提供了一個類序列的接口。其中方法返回迭代器對象本身方法返回容器的下一個元素,在結(jié)尾時引發(fā)異常。迭代器協(xié)議迭代器協(xié)議即實現(xiàn)與方法。 迭代器 迭代器在 Python 2.2 版本中被加入, 它為類序列對象提供了一個類序列的接口。 Python 的迭代無縫地支持序列對象, 而且它還允許迭代非序列類型, 包括用戶定義的對象。即迭代器可以迭代不是序列但表現(xiàn)...
摘要:另一個則是的迭代器,它負責記錄當前到哪一個的迭代器了。每次時,我們先調(diào)用一下,確保當前的迭代器有下一個值。代碼當前列表的迭代器為空,或者當前迭代器中沒有下一個值時,需要更新為下一個迭代器 Flatten 2D Vector Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ ...
閱讀 375·2023-04-25 16:38
閱讀 1492·2021-09-26 09:46
閱讀 3333·2021-09-08 09:35
閱讀 2785·2019-08-30 12:54
閱讀 3254·2019-08-29 17:06
閱讀 1023·2019-08-29 14:06
閱讀 3351·2019-08-29 13:00
閱讀 3471·2019-08-28 17:53