今天和大家聊的问题叫做 扁平化嵌套列表迭代器,我们先来看题面:https://leetcode-cn.com/problems/flatten-nested-list-iterator/、
示例
示例 1: 输入:nestedList = [[1,1],2,[1,1]] 输出:[1,1,2,1,1] 解释:通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。 示例 2: 输入:nestedList = [1,[4,[6]]] 输出:[1,4,6] 解释:通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,4,6]。
解题
用一个栈存储列表类型的元素,初始化时把数组从后往前压入栈,因为栈是后进先出的。函数next()就是弹出栈顶元素,然后调用getInteger()函数,将返回值返回;函数hasNext()是判断如果栈非空的话,则将栈顶元素调用isInteger()函数,如果返回true,那么返回true;否则将该元素从栈顶弹出,然后将该元素调用getList()函数,将得到的列表中的元素从后往前压入栈中。如此循环,当栈为空而退出while循环时,返回false。
class NestedIterator { private: stack<NestedInteger> s; public: NestedIterator(vector<NestedInteger> &nestedList) { for(int i = nestedList.size() - 1; i >= 0; i--) s.push(nestedList[i]); } int next() { NestedInteger temp = s.top(); s.pop(); return temp.getInteger(); } bool hasNext() { while(!s.empty()){ NestedInteger temp = s.top(); if(temp.isInteger()) return true; s.pop(); for(int i = temp.getList().size() - 1; i >= 0; i--) s.push(temp.getList()[i]); } return false; } };
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。