继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

求数组的所有子集

慕姐8265434
关注TA
已关注
手记 1309
粉丝 222
获赞 1065

序言

在项目中,有时候我们需要求一个数组的所有子集。例如一个数组有三个元素,[a,b,c],求该数组的所有子集。分别是{},{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}共有8个子集,如果该数组有4个元素,5个元素或者更多元素呢?

算法解析如下

因为求解子集有规律,所以我们可以采用递归的思路去实现

/**
 求数组所有子集

 @param array 原始数组
 @param numbers 数字数组 - 用于标识使用
 @param index 索引
 */- (void)subElements:(NSArray *)array numbers:(NSMutableArray *)numbers index:(int)index {    if (index == array.count) {        NSMutableString *strM = [NSMutableString string];        for (int i = 0; i < array.count; i++) {            NSNumber *number = numbers[i];            if (number.intValue == 1) {
                [strM appendString:array[i]];
            }
        }        if (strM.length > 0) {            NSLog(@"%@",strM);
        }        return;
    }
    numbers[index] = [NSNumber numberWithInt:0];
    [self subElements:array numbers:numbers index:index + 1];
    numbers[index] = [NSNumber numberWithInt:1];
    [self subElements:array numbers:numbers index:index + 1];
}

外界直接传参数调用即可

NSArray *array = @[@"a",@"b",@"c",@"d",@"e"];NSMutableArray *numbers = [NSMutableArray array];for (int i = 0; i < array.count; i++) {
  [numbers addObject:[NSNumber numberWithInt:0]];
}
    
 [self subElements:array numbers:numbers index:0];

运行结果如下:

webp

image.png


算法分析

webp

image.png

通过控制台输出,我们发现当index == 5的时候,numbers 里面的数据是有规律的即呈现递增样式。

webp

image.png



作者:路飞_Luck
链接:https://www.jianshu.com/p/04f8f88dfad2


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP