首页 > 其他 > 详细

力扣 - 2. 两数相加

时间:2020-11-08 22:31:48      阅读:85      评论:0      收藏:0      [点我收藏+]

题目

2. 两数相加

思路

  • 这个和445. 两数相加 II很像,而且比 445 的简单一点
  • 如何控制位数不一样情况下计算?如果短的先到末尾了,但是长的那个还没到,那么我们可以先用0来代替短的那个值,结果是不影响的
  • 当两个链表都到达末尾时候,但是carry,即进位是1,那么还需要再计算一次,将进位加上
  • 只有三者都不满足条件,才算计算完,跳出循环

代码

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode();
        ListNode p = head;
        int carry = 0;
        int num1 = 0;
        int num2 = 0;

        // 只要两个链表有一个不为空或者carry为1,链表就还要再进行计算
        while (l1 != null || l2 != null || carry != 0) {
            // 如果链表到达末尾了就用0代替
            if (l1 != null) {
                num1 = l1.val;
                l1 = l1.next;
            } else {
                num1 = 0;
            }
            if (l2 != null) {
                num2 = l2.val;
                l2 = l2.next;
            } else {
                num2 = 0;
            }
            int total = num1 + num2 + carry;
            // 计算进位
            carry = total / 10;
            // 求余
            total %= 10;
            ListNode n = new ListNode(total);
            p.next = n;
            p = p.next;
        }
        return head.next;
    }
}

复杂度分析

  • 时间复杂度:\((N)\),其中 N 为 l1 / l2 中较长的那个链表的长度
  • 空间复杂度:\(O(N)\),其中 N 为新链表的长度

力扣 - 2. 两数相加

原文:https://www.cnblogs.com/linzedian/p/13945019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!