【发布时间】:2015-09-06 04:14:21
【问题描述】:
面试时被问到这个问题
给定一个 java 中的假设列表,同时持有整数 内容,也可能包含另一个类似类型的列表
示例:[1,3,5,[6,7],8,9,10,[11,13,15,[16,17,[18,19]]],20]
输出应该是:
[1,3,5,6,7,8,9,10,11,13,15,16,17,18,19,20]
我想容易!所以我提出了一个解决问题的递归解决方案!还是不行?
面试官说子列表可能会下降到任何深度,因此可能会导致 stackoverflow 错误!
我尝试想出一个非递归的解决方案,但不能。谁能说出那个非递归解决方案可能是什么?
【问题讨论】:
-
这个列表是如何存储的?
-
使用递归代码,如果递归太深,您总是有可能发生堆栈溢出,但这实际上只是在这种情况下理论上的可能性 - 您必须有一个 very i> 在实践中获得 SOE 之前,深度嵌套列表(数千层?)。
-
@PM77-1 好吧,它是一个java 中的假设列表。我不确定它是如何存储的,可能是
List<Object>并使用typeof检查正确的类型是Integer还是List<Object>(再次)。 -
子列表可能会下降到任何深度,因此可能导致 stackoverflow 错误! 好吧,增加堆栈的大小并收工。说真的,除非你有一些讨厌的数据,否则这不应该发生。
-
@Ouney 您似乎对有两个术语堆栈感到困惑。一种是程序使用的数据结构,它是在堆上分配的。另一个是程序的堆栈,递归调用在其上创建单独的框架。当您超过第二个堆栈的大小时,就会发生堆栈溢出。