实现效果:
排列前:
@[@[@"A",@"B"],@[@"1",@"2"],@[@"a",@"b"]];
排列后:
@[@[@"A",@"1",@"a"],@[@"A",@"1",@"b"],@[@"A",@"2",@"a"],@[@"A",@"2",@"b"],@[@"B",@"1",@"a"],@[@"B",@"1",@"b"],@[@"B",@"2",@"a"],@[@"B",@"2",@"b"]];
实现思路就是化繁为简,先将数组前两个元素排列合并为一个数组,然后替换前两个元素,使用递归方式调用,直到最后只剩下一个数组。
步骤:一次替换后数组状态
@[@[@[@"A",@"1"],@[@"A",@"2"],@[@"B",@"1"],@[@"B",@"2"]],@[@"a",@"b"]];
后面继续递归调用上面的步骤。具体实现函数如下:
- (NSMutableArray *)mergeArray:(NSMutableArray *)array
{
if (array.count > 1) {
NSMutableArray *resultArray = [NSMutableArray array];
NSMutableArray *firstArray = array[0];
NSMutableArray *secondArray = array[1];
for (int i=0; i < firstArray.count;i++) {
if (![firstArray[i] isKindOfClass:[NSMutableArray class]]) {
firstArray[i] = [NSMutableArray arrayWithObjects:firstArray[i], nil];
}
for (int j = 0; j < secondArray.count; j++) {
if (j == 0) {
[firstArray[i] addObject:secondArray[j]];
} else {
[firstArray[i] replaceObjectAtIndex:((NSArray *)firstArray[i]).count-1 withObject:secondArray[j]];
}
NSArray *temArray = [firstArray[i] mutableCopy];
[resultArray addObject:temArray];
}
}
[array replaceObjectAtIndex:0 withObject:resultArray];
[array removeObjectAtIndex:1];
[self mergeArray:array];
}
return array;
}