美文网首页我爱编程
求数组的所有子集

求数组的所有子集

作者: 路飞_Luck | 来源:发表于2018-08-09 19:14 被阅读256次

序言

在项目中,有时候我们需要求一个数组的所有子集。例如一个数组有三个元素,[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];

运行结果如下:

image.png
算法分析
image.png

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

image.png

通过以上表格,我们可以很直观的看出组合规律,就是把位置为1的字母组合起来即可。


项目连接地址

相关文章

  • 求数组的所有子集

    序言 在项目中,有时候我们需要求一个数组的所有子集。例如一个数组有三个元素,[a,b,c],求该数组的所有子集。分...

  • 78. Subsets 子集

    题目 给定一个整数数组,返回所有可能的子集。子集必须是不重复的。 解析 这个问题和上一个问题相似,就是求 cn0 ...

  • js获取数组的所有子集

    使用javascript获取一个数组的所有子集,比如:[1, 2, 3] 的所有子集是:[[], [1], [2]...

  • 求集合的所有子集

    求集合的所有子集 对于任意集合A,元素个数为n(空集n=0),其所有子集的个数为2^n个 如集合A={a,b,c}...

  • 【leetcode】子集

    【leetcode】子集 题目: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说...

  • LeetCode-078-子集

    子集 题目描述:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不...

  • 非空子集

    请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保...

  • LintCode每日一练-限制条件子集

    问题:限制条件子集 给一个数组,给定一个target,求满足以下条件的子集个数:条件:子集中的最小值+最大值小于给...

  • LeetCode刷题For Swift·78. 子集

    1、原题 给你一个整数数组 nums ,返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。 示例 1: 示...

  • 子集

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例...

网友评论

    本文标题:求数组的所有子集

    本文链接:https://www.haomeiwen.com/subject/abklvftx.html