溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用java實現(xiàn)扁平化嵌套列表迭代器

發(fā)布時間:2022-01-17 14:30:48 來源:億速云 閱讀:227 作者:清風(fēng) 欄目:大數(shù)據(jù)

本文將為大家詳細(xì)介紹“如何使用java實現(xiàn)扁平化嵌套列表迭代器”,內(nèi)容步驟清晰詳細(xì),細(xì)節(jié)處理妥當(dāng),而小編每天都會更新不同的知識點(diǎn),希望這篇“如何使用java實現(xiàn)扁平化嵌套列表迭代器”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內(nèi)容如下,一起去收獲新知識吧。

給你一個嵌套的整型列表。請你設(shè)計一個迭代器,使其能夠遍歷這個整型列表中的所有整數(shù)。列表中的每一項或者為一個整數(shù),或者是另一個列表。

示例 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]。

答案:

 1interface NestedInteger {
2    boolean isInteger();
3
4    Integer getInteger();
5
6    List<NestedInteger> getList();
7}
8
9class NestedIterator implements Iterator<Integer> {
10    Stack<NestedInteger> stack = new Stack<>();
11
12    public NestedIterator(List<NestedInteger> nestedList) {
13        for (int i = nestedList.size() - 1; i >= 0; i--) {
14            stack.push(nestedList.get(i));
15        }
16    }
17
18    @Override
19    public Integer next() {
20        return stack.pop().getInteger();
21    }
22
23    @Override
24    public boolean hasNext() {
25        while (!stack.isEmpty()) {
26            NestedInteger curr = stack.peek();
27            if (curr.isInteger()) {
28                return true;
29            }
30            stack.pop();
31            for (int i = curr.getList().size() - 1; i >= 0; i--) {
32                stack.push(curr.getList().get(i));
33            }
34        }
35        return false;
36    }
37}

解析:

使用一個棧來存儲,在構(gòu)造函數(shù)中壓棧是從list的最后一個元素開始的,我們知道棧是先進(jìn)后出的一種數(shù)據(jù)結(jié)構(gòu),所以最先壓棧的肯定是最后出棧。這里的算法核心是在hasNext函數(shù)中,其中第27行判斷NestedInteger中是否只有單獨(dú)的一個元素,如果是的話就直接return true,否則把curr.getList中的元素還按照構(gòu)造方法中的再一個個壓棧。

Java的特點(diǎn)有哪些

Java的特點(diǎn)有哪些 1.Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,實現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 2.Java具有簡單性、面向?qū)ο?、分布式、安全性、平臺獨(dú)立與可移植性、動態(tài)性等特點(diǎn)。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。

感謝您能讀到這里,小編希望您對“如何使用java實現(xiàn)扁平化嵌套列表迭代器”這一關(guān)鍵問題有了從實踐層面最深刻的體會,具體使用情況還需要大家自己動手實踐使用過才能領(lǐng)會,如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI