美文网首页
一个(数字)数组任意组合相加等于一个常数求出数组中的组合

一个(数字)数组任意组合相加等于一个常数求出数组中的组合

作者: 你美依旧 | 来源:发表于2017-10-10 18:37 被阅读0次

1 将传进数据数组排序
2 递归求和 (当相加大于特定值 进行内部递归)
1 将数组排序

-(void)textSum:(NSArray *)numArray targetNum:(float)targetNum{
    NSMutableArray *array = [NSMutableArray arrayWithArray:numArray];
    //先排序/Users/amc/Desktop/choose/choose
    for (int i = 0; i < array.count; ++i) {
        // 从水底往水面浮,所以从最后一个开始
        for (NSInteger j = array.count-1; j > i; j--) {
            // 后者比前者还小,将需要交换
            if ([array[j] intValue] < [array[j - 1] intValue]) {
                [array exchangeObjectAtIndex:j withObjectAtIndex:j-1];
            }
        }
    }
    self.array = array;
    self.targetNum = targetNum;
    for (int i = 0; i < array.count; i++) {
        NSMutableArray *addArray = [NSMutableArray array];
        [self printNum:i addArray:addArray];
    }
}

2 判定数组之和 内递归的实现

-(BOOL)printNum:(NSInteger)index addArray:(NSMutableArray *)addArray{
    [addArray addObject:self.array[index]];
    float sum = [self sum:addArray];
//    NSLog(@"111%@",addArray);
    if (sum == self.targetNum) {
//        NSLog(@"%@",addArray);
        [addArray removeLastObject];
        return YES;
    }else if (sum >self.targetNum){
        [addArray removeLastObject];
        return NO;
    }else{
        for (NSInteger i = index+1; i < self.array.count; i++) {
            //递归内循环
            if (![self printNum:i addArray:addArray]) {
                break;
            }
        }
        [addArray removeLastObject];
        return YES;
    }
}

3 数组求和

-(CGFloat)sum:(NSArray *)array{
    CGFloat sum = 0;
    for (NSString *str in array) {
        sum += [str floatValue];
    }
    return sum;
}

相关文章

  • 一个(数字)数组任意组合相加等于一个常数求出数组中的组合

    1 将传进数据数组排序2 递归求和 (当相加大于特定值 进行内部递归)1 将数组排序 2 判定数组之和 内递归的实...

  • 1.two sum

    题目大意:给出一个int数组,和一个目标数字。求出该数组中哪两个的值相加等于目标数字,返回两个值得数组下标。

  • TwoSum

    题目大意: 找到数组中两个元素相加等于指定数的所有组合 情况一:给定数组中不含重复元素,且均为正整数 思路: 使用...

  • 数组面试题-子集和问题

    题目描述 给定一个含有n个元素的整形数组,再给定一个和sum,求出数组中满足给定和的所有元素组合存在一个数组中。 ...

  • 2018-06-06Hashmap

    先看一道题:给定一个数组 nums = [2, 7, 11, 15]要求找出数组中任意两个数相加等于 target...

  • 一个笔试题

    需求 有一个数组,输出任意两个相加等于指定值的数字 实现思路 从第index个开始,跟index+1相加是否等于t...

  • LeetCode题解之判断能否形成等差数列

    判断能否形成等差数列 题目描述 给你一个数字数组 arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那...

  • LeetCode题解之判断能否形成等差数列

    判断能否形成等差数列 题目描述 给你一个数字数组 arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那...

  • LeetCode

    Two Sum 描述:给定一个数组num[]和一个数字target,若数组中有两个数字相加等于target在,则输...

  • 关于webpack loader的加载顺序

    函数组合 先介绍一个概念,函数组合:函数组合是函数式编程中非常重要的思想,它的实现的思路也没有特别复杂。 函数组合...

网友评论

      本文标题:一个(数字)数组任意组合相加等于一个常数求出数组中的组合

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