• LeetCode第2题题解:两数相加


    LeetCode第2题:两数相加


    Ps:本系列文章只为记录自己刷LeetCode过程中的解题过程和思路。


    题目来源,LeetCode

    题目描述:

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

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

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

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

    输出:7 -> 0 -> 8

    原因:342 + 465 = 807


    解题过程和思路:

    这道题的题目很明确,按照我们手算的思路来:从低位到高位依次相加,并且有进位就向高位进位即可。其实就是用链表来存储数字,并且用计算机模拟手算的过程罢了。但是这题以我目前的能力,不太理解要怎么操作才能加快算法的效率(不能打败90%以上的人),留待以后补充。


    解题收获:

    记得链表最初在C++中接触过,其他语言中暂时没有接触过链表。这题让我重复复习了一遍链表,并且熟悉了在python中建立和使用链表的方法,记住啦。


    代码展示

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            result_head = p = ListNode(None) # result_head为结果链表的头结点(空的,返回的时候要返回                                               # result.next),p为用来遍历的指针
            s = 0 # 初始进位为0
            while l1 or l2 or s: # 如果l1非空或l2非空或有上一次计算有进位s非0
                s = s + (l1.val if l1 else 0) + (l2.val if l2 else 0)
                val = s % 10 # eg. 21 % 10 = 1
                s = s // 10 # eg. 21 // 10 = 2
                p.next = ListNode(val) # 以val值新建一个结点
                p = p.next # 结果链表的遍历指针往下一位移
                l1 = l1.next if l1 else None # 加数链表的指针对应往下一位移
                l2 = l2.next if l2 else None # 加数链表的指针对应往下一位移
            return result_head.next # 头结点为空结点,因此返回头结点的下一个结点
    
    

    结果展示

    结果展示

  • 相关阅读:
    迪杰斯特拉算法简单分析
    华科机考:二叉排序树(改)
    华科机考:八进制
    华科机考:阶乘
    华科机考:找位置
    华科机考:回文字符串
    华科机考:a+b
    华科机考:N阶楼梯上楼
    华科机考:大整数排序
    iOS 适配iOS9
  • 原文地址:https://www.cnblogs.com/wangqinze/p/13605750.html
Copyright © 2020-2023  润新知