算法题:两数相加

2021-03-22  本文已影响0人  hui8685291

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

解题代码:(Objective-c)

- (NSArray *)operation:(NSArray *)arr1 :(NSArray *)arr2{
    NSInteger num = MAX(arr1.count, arr2.count);
    NSArray *a1 = [self changeArr:arr1 :num];
    NSArray *a2 = [self changeArr:arr2 :num];
    
    NSMutableArray *totalArr = [NSMutableArray array];
    NSInteger temp = 0;
    for(NSInteger i = 0; i < num; i++) {
        if ([a1[i] intValue] >= 10 || [a2[i] intValue] >= 10) {
            return @[];
        }
        
        NSInteger sumNum = [a1[i] intValue] + [a2[i] intValue];
        if (1 == temp) {
            sumNum += 1;
            temp = 0;
        }
        
        if(sumNum < 10) {
            [totalArr addObject:@(sumNum)];
        } else {
            if (i == num-1) {
                 [totalArr addObject:@(sumNum % 10)];
                 [totalArr addObject:@(1)];
            }else{
                 [totalArr addObject:@(sumNum % 10)];
                 temp = 1;
            }
           
        }
    }
    
    [totalArr.reverseObjectEnumerator allObjects];
    
    return totalArr;
}

- (NSArray *)changeArr:(NSArray *)arr : (NSInteger)maxNum{
    NSInteger arrCount = arr.count;
    NSMutableArray *mutableArr = [[NSMutableArray alloc]initWithArray:arr];
    if (arrCount < maxNum) {
        for (NSInteger i = arrCount ; i < maxNum; i++) {
            [mutableArr addObject:@0];
        }
    }
    
    return mutableArr;
}

上一篇 下一篇

猜你喜欢

热点阅读