成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

LeetCode 341. Flatten Nested List Iterator

mingzhong / 2648人閱讀

摘要:設(shè)計一個迭代器,使其能夠遍歷這個整型列表中的所有整數(shù)。列表中的項或者為一個整數(shù),或者是另一個列表。示例輸入輸出解釋通過重復調(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].
描述

給定一個嵌套的整型列表。設(shè)計一個迭代器,使其能夠遍歷這個整型列表中的所有整數(shù)。

列表中的項或者為一個整數(shù),或者是另一個列表。

示例 1:

輸入: [[1,1],2,[1,1]]
輸出: [1,1,2,1,1]
解釋: 通過重復調(diào)用 next 直到 hasNext 返回false,next 返回的元素的順序應(yīng)該是: [1,1,2,1,1]。
示例 2:

輸入: [1,[4,[6]]]
輸出: [1,4,6]
解釋: 通過重復調(diào)用 next 直到 hasNext 返回false,next 返回的元素的順序應(yīng)該是: [1,4,6]。

思路

遞歸遍歷,使用雙端隊列,取出每一個元素,放入到隊列中

如果當前的元素是整型(使用自帶的 isInteger 方法),將當前元素放入到隊列中,如果是 List,遞歸調(diào)用當前函數(shù)。

next 方法從隊列中不斷取出元素

# -*- 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)計元素的個數(shù)
        self.count = len(self.queue)

    def _get_elements(self, nestedList):
        for item in nestedList:
            # isInteger 方法是 NestedIterator 類提供的方法
            # 如果是整型,將該數(shù)組添加到雙端隊列中
            if item.isInteger():
                self.queue.append(item.getInteger())
                # 如果是一個 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
            # 返回下一個元素
            return self.queue.popleft()
        return False

    def hasNext(self):
        """
        :rtype: bool
        """
        return self.count > 0

源代碼文件在 這里 。
?本文首發(fā)于 何睿的博客 ,歡迎轉(zhuǎn)載,轉(zhuǎn)載需保留 文章來源 ,作者信息和本聲明.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43534.html

相關(guān)文章

  • leetcode341. Flatten Nested List Iterator

    摘要:題目要求假設(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...

    MartinHan 評論0 收藏0
  • leetcode 341 Flatten Nested List Iterator 以及其他Iter

    摘要:返回的是表示是否走到了結(jié)尾。起到的就是緩存作用,因為調(diào)用之后馬上就走到下一個了。如果調(diào)用,返回用得到和最初的輸入相同的做相同的步驟存入不斷拆開得到結(jié)果。思想就是來自括號,后面也會跟進的專題 Iterator其實就是一個單鏈表,無法回頭看。java里很多數(shù)據(jù)結(jié)構(gòu)都有這個接口,使用時需要initalize,得到一個iterator. 調(diào)用next()返回的是一個object, 指向的是下一...

    chaosx110 評論0 收藏0
  • [LintCode/LeetCode] Flatten Nested List Iterator

    摘要:首先,根據(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...

    spacewander 評論0 收藏0
  • [Leetcode] Flatten 2D Vector 整平二維向量

    摘要:另一個則是的迭代器,它負責記錄當前到哪一個的迭代器了。每次時,我們先調(diào)用一下,確保當前的迭代器有下一個值。代碼當前列表的迭代器為空,或者當前迭代器中沒有下一個值時,需要更新為下一個迭代器 Flatten 2D Vector Implement an iterator to flatten a 2d vector. For example, Given 2d vector = [ ...

    MageekChiu 評論0 收藏0
  • [LeetCode] 251. Flatten 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...

    curried 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<