oc实现多数组元素组合排列

博客介绍了数组排列合并的实现,先将数组前两个元素排列合并成一个数组并替换原前两个元素,采用递归方式调用,直至只剩一个数组,还提及了具体步骤并给出实现函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现效果:

排列前:

@[@[@"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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值