zoukankan      html  css  js  c++  java
  • LeetCode(2. 两数相加)

    问题描述

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807
    

    解决方案

    # Definition for singly-linked list.
    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
    
    
    class Solution:
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            r = res = ListNode(0)
            carry = 0
            while l1 or l2:
                x = l1.val if l1 else 0
                y = l2.val if l2 else 0
                s = carry + x + y
                carry = s // 10
                r.next = ListNode(s % 10)
                r = r.next
                if l1:
                    l1 = l1.next
                if l2:
                    l2 = l2.next
                if carry > 0:
                    r.next = ListNode(1)
            return res.next
    
    

    这个题本质上是一个简单数学问题

    • 首先浅复制出两个listnode,一个作为计算,一个作为最终输出
    • carry为当前两个节点相加以后的进位,如4+7得11那么此时carry取值为1
    • 只要L1和L2不为空,则进入循环
    • 取L1和L2的当前值,若为空则赋值为1
    • 相加得carry
    • 随后更新节点
  • 相关阅读:
    【NOIP2017】奶酪
    【NOIP2017】时间复杂度
    【NOIP2005】过河
    【洛谷习题】垃圾陷阱
    dfs序
    bzoj2441 小W的问题
    彩色迷宫
    蛋糕与蛋挞
    树上倍增
    因数个数定理
  • 原文地址:https://www.cnblogs.com/huang-yc/p/10325908.html
Copyright © 2011-2022 走看看