https://www.lintcode.com/problem/flatten-list/description
描述
给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。
如果给定的列表中的要素本身也是一个列表,那么它也可以包含列表。
样例
给定 ,返回 。
给定 ,返回 。
挑战
请用非递归方法尝试解答这道题。
思路
递归是容易想到的。但是效率低,提交后是执行超时的。
递归实现
非递归实现也是容易想到,借助一个堆栈,在对象是列表时将对象的子对象按照从后到前的顺序压进栈。遍历处理堆栈元素,直到堆栈为空。
小结
非递归代码中如果将ArrayList list =newArrayList();中的ArrayList替换为LinkedList会造成执行超时。ArrayList 的添加效率还是略高于LinkedList的。
代码中由于将子列表拆分后压入堆栈,需要倒序遍历从后往前压入,这个地方可能是个费时的操作。因为不确定传入参数的List具体实现是那种。
领取专属 10元无门槛券
私享最新 技术干货