【发布时间】:2015-07-07 01:14:57
【问题描述】:
我收到了一个我无法解决的面试问题。我觉得解决方案是递归的,但即使那样我也无法理清逻辑。问题如下
给定嵌套数组,编写一个枚举器类,使得 next() 按顺序返回元素,例如:
所以如果输入是:[1,[4,3],6,[5,[1,0]]] 输出为:1, 4, 3, 6, 5, 1, 0
我应该在 Objective-C 中做这件事,而我的(糟糕的解决方案)是
- (void) getNext(NSArray *) array {
while(!array.isEmpty)
getNext(array objectAtIndex(first);
}
NSLog(@"object is %@", [array objectAtIndex[0]]);
有人有什么想法吗?我也会接受一个非客观的 C 答案只是为了看看逻辑
【问题讨论】:
-
我会使用一个堆栈,其元素会跟踪当前“打开”数组中的当前位置;栈顶是当前数组。每次下一个元素变成一个新数组时,您将一个包含对它的引用和索引(最初为 0)的元素压入此堆栈;每次到达当前数组的末尾时,都会弹出堆栈并重新尝试读取“父”数组。否则,只需抓取当前数组中的当前元素,并增加其索引。
-
至少需要检查数组中的每一项是数字还是子数组。这可以通过
isKindOfClass或isMemberOfClass完成。 (我永远不记得该使用哪一个。)然后你进入整个 class cluster foo bar,这可能是面试官在测试你的地方。 -
我认为,问题在于该函数没有从哪个元素获取它应该返回下一个元素。
标签: objective-c arrays algorithm multidimensional-array