原理:采用递归算法依次遍历数组中元素,并将组合添加到一个新的数组,最后得到一个数组,数组中存放所有组合,每个组合是一个数组
算法如下:
- (void)combine:(NSMutableArray *)result data:(NSArray *)data curr:(int)currIndex count:(int)count {
if (currIndex == count) {
[_combinationArr addObject:[result mutableCopy]];
[result removeLastObject];
}else {
NSArray* array = [data objectAtIndex:currIndex];
for (int i = 0; i < array.count; ++i) {
[result addObject:[array objectAtIndex:i]];
//进入递归循环
[self combine:result data:data curr:currIndex+1 count:count];
if ((i+1 == array.count) && (currIndex-1>=0)) {
[result removeObjectAtIndex:currIndex-1];
}
}
}
}
result 一个空数组-用来存放所有组合元素
_combinationArr 最后存放所有组合的数组
currIndex 起始位置
count需要组合数组的个数即_combinationArr的个数
建议涉及到数据量比较大的元素组合时,应当开辟子线程进行递归调用!!!