[英]Quickest way to calculate the Euclidean-Distance between two points in N-Dimensional space
[英]get next element in n-dimensional array
我被問到一個我無法解決的面試問題。 我覺得解決方案是遞歸的,但即便如此,我也無法理清邏輯。 問題如下
給定嵌套數組,編寫一個枚舉類,使 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 答案只是為了看看邏輯
我創建了一個NSArray
類別。
@interface NSArray(EXT)
@property (nonatomic, assign) NSNumber *index;
- (NSNumber *)next;
@end
static void *aIndex = &aIndex;
@implementation NSArray (EXT)
- (NSNumber *)index {
return objc_getAssociatedObject(self, aIndex);
}
- (void)setIndex:(NSNumber *)index {
objc_setAssociatedObject(self, aIndex, index, OBJC_ASSOCIATION_ASSIGN);
}
- (NSNumber *)next {
if(self.index.integerValue == self.count) {
return nil;
}
else {
id nextObj = [self objectAtIndex:self.index.integerValue];
if([nextObj isKindOfClass:[NSNumber class]]) {
self.index = @(self.index.integerValue+1);
return nextObj;
}
else {
id childNext = [(NSArray *)nextObj next];
if(childNext == nil) {
self.index = @(self.index.integerValue+1);
return [self next];
}
else {
return childNext;
}
}
}
}
@end
你可以像下面這樣使用它:
NSArray *input = @[@1, @[@4, @3], @6, @[@5, @[@1, @0]]];
NSNumber *next = [input next];
while (next != nil) {
NSLog(@"%@", next);
next = [input next];
}
這個問題的簡單解決方案是
@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *finalArray;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *input = @[@1, @[@4, @3], @6, @[@5, @[@1, @0]]];
_finalArray = [NSMutableArray array];
[self arrayToString:input];
NSLog(@"Final array %@", [self.finalArray componentsJoinedByString:@","]);
}
- (void)arrayToString: (NSArray *) array {
for (int i = 0; i < [array count]; i++) {
[self recurseValue:[array objectAtIndex:i]];
}
}
- (void)recurseValue:(id)value {
if ([value isKindOfClass:[NSNumber class]]) {
[self.finalArray addObject:value];
} else if ([value isKindOfClass:[NSArray class]]) {
for (int i = 0; i< [value count]; i++) {
[self recurseValue:[value objectAtIndex:i]];
}
}
}
輸出:1,4,3,6,5,1,0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.