美文网首页
【iOS每日算法】两数相加,给出两个非空的链表用来表示两个非负的

【iOS每日算法】两数相加,给出两个非空的链表用来表示两个非负的

作者: CoderRocker_Axl | 来源:发表于2020-09-14 21:05 被阅读0次

题目:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

考察点:

  • 这是一道LeetCode上非常基础的一道算法题。个人觉得考察点就是,用尽量小的时间复杂度去解题。因为如果一开始思路是先把链表中的数转成两个整数再sum,之后再放进链表里也是一个思路,但这样会循环两遍链表。但因为两个链表中的个位,十位百位都是一致的,所以一次循环,各位相加进位,并放入链表就可以解决问题。这样就少做两次循环,是更优解法。

解法:

一、循环两个链表对应各位,并相加
  • 这里链表用数组表示,理解算法思路即可

- (NSArray *)sumNum:(NSArray<NSNumber *>*)numArr1 withNum2:(NSArray<NSNumber *>*)numArr2 {
    NSInteger len1 = numArr1.count;
    NSInteger len2 = numArr2.count;
    NSMutableArray *totalArr = [NSMutableArray array];
    for(int i = 0; (i < len1 || i < len2); i++) {
        int sumNum = (i < len1 ? [numArr1[i] intValue] : 0) + (i < len2 ? [numArr2[i] intValue] : 0) + (i < totalArr.count ? [totalArr[i] intValue] : 0);
        if(sumNum < 10) {
            totalArr[i] = @(sumNum);
        } else {
            totalArr[i] = @(sumNum % 10);
            totalArr[i + 1] = @(1);
        }
    }
    return totalArr;
}


二、先算出两数之和,然后放入数组
  • 这个解法比上一个复杂,但是更容易想到,毕竟直接相加两个数,要比各位数相加进位要容易。但实际上多进行了两次循环。
- (NSArray *)twoSumNum:(NSArray<NSNumber *>*)numArr1 withNum2:(NSArray<NSNumber *>*)numArr2 {
    int num1 = 0;
    int num2 = 0;
    for (int i = 0; i < numArr1.count; i++) {
        num1 = num1 + [numArr1[i] intValue] * pow(10, i);
    }
    for (int i = 0; i < numArr2.count; i++) {
        num2 = num2 + [numArr2[i] intValue] * pow(10, i);
    }
    int totalNum = num1 + num2;
    NSMutableArray *totalArr = [NSMutableArray array];
    for(int i = 0;;i++) {
        int num = (totalNum % [@(pow(10, i + 1)) intValue]) / [@(pow(10, i)) intValue];
        int yushu = totalNum / [@(pow(10, i + 1)) intValue];
        totalArr[i] = @(num);
        if(yushu <= 0) {
            return totalArr;
        }
    }
}

总结

  • 从这道题中我们可以学到如何更好的利用数据和数据的结构,而不是简单的去处理问题,更好的算法和思路能为程序节省很多资源,提升效率。

相关文章

  • Leetcode(2) -两数相加 - java版

    Leetcode(2) -两数相加 - java版 题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们...

  • LeetCode(PHP)之两数相加

    题目:两数相加(Add Two Numbers) 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位...

  • LeetCode-2 两数相加

    题目:2. 两数相加 难度:中等 分类:链表 解决方案:链表的遍历 题目描述 给出两个非空的链表用来表示两个非负的...

  • Chapter 3链表

    单链表 problem2 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序...

  • KirogiYi ARTS打卡:第一周

    Algorithm(两数相加) 描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 ...

  • LeetCode 每日一题 [2] 两数相加

    LeetCode 两数相加 [中等] 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆...

  • LeetCode 两数相加 Rust

    LeetCode 两数相加 Rust 题目 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 ...

  • 2019-08-12

    转:LeetCode-python 2.两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位...

  • 2.两数相加-addTwoNumbers

    链接 LeeCode-2-两数相加 参考 Git 题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各...

  • leetCode-02 《两数相加》详细解析

    两数相加 刚开始做leetCode 简直就像是梦开始的地方 描述 给出两个 非空 的链表用来表示两个非负的整数。...

网友评论

      本文标题:【iOS每日算法】两数相加,给出两个非空的链表用来表示两个非负的

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