我已经尝试了几个小时来制定出能够达到以下条件的算法:
我认为最好用一个例子来解释:
e.g。对于三个阵列
NSArray *input =
@[[@"cat",@"dog",@"mouse"],[@"apple",@"banana"],[@"green"]]
产生类似这样的输出:
@[
@"catapplegreen",
@"catbananagreen",
@"dogapplegreen",
@"dogbananagreen",
@"mouseapplegreen",
@"mousebananagreen"
];
我已尝试嵌套for
循环,但无法想出允许存在任意数量的循环的方法,因为需要有一个循环或“&”级别& #39;输入中的每个数组。
如果有人有任何建议(甚至只是指出要解决这个问题的指示),我将非常感激。
答案 0 :(得分:2)
基本上我认为你想要做的是深度优先遍历你的数据。
您可以使用
等功能- (void)DepthFirstOnString:(NSString *)string children:(NSArray *)children {
if (children.count < 1) {
// You're finished
NSLog(@"%@", string);
return;
} else {
// Keep going
NSArray *next = children[0];
NSMutableArray *remaining = [children mutableCopy];
[remaining removeObject:next];
[next enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSMutableString *currentString = [string mutableCopy];
[currentString appendString:obj];
[self DepthFirstOnString:currentString children:remaining];
}];
}
}
被此代码调用:
NSArray *input = @[@[@"cat",@"dog",@"mouse"], @[@"apple",@"banana"], @[@"green"]];
NSArray *first = input[0];
NSMutableArray *remaining = [input mutableCopy];
[remaining removeObject:first];
[first enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[self DepthFirstOnString:obj children:remaining];
}];
不是最新的代码,但希望能让您知道在哪里拍摄。