美文网首页算法学习打卡计划
leetcode第二题 —— 两数相加

leetcode第二题 —— 两数相加

作者: 不分享的知识毫无意义 | 来源:发表于2019-11-02 14:15 被阅读0次

1.题目

原题:

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。假设除了数字 0 之外,这两个数字都不会以零开头。

例子:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)  实际是[2,4,3] [5,6,4]
输出:7 -> 0 -> 8   实际是[7,0,8]
原因:342 + 465 = 807

2.解析

这道题属于比较基础的算法题,没有涉及特别多复杂的逻辑。笔者选用python进行编程,这里需要解决的两个核心问题,第一个是python实现单链表,第二个是各位相加的逢十进一(进制问题)。

  • python实现单链表:
    定义一个Node,Node包括两个属性,value和next,通过循环实现链表结构,对于链表的其他操作,如插入、删除等也是比较有意思的知识点,大家可以自行探索,本处不涉及。
  • 各位相加的逢十进一
    由于非负整数是倒序排列,各个位都是一一对应的,不用考虑两个整数长度不一致的问题。进制控制可以增加一个flag,但凡涉及到进位将flag设置为1,参与下一次计算。

3.python代码

class Node:
    def __init__(self, value=None, next=None):
        self.value = value
        self.next = next


class Solution:
    def add_2_number(self, l1, l2):
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        jinzhi = 0
        head = Node(0)
        l = head
        while l1 or l2 or jinzhi:#控制计算进行的条件
            sum, jinzhi = jinzhi, 0
            if l1:
                sum += l1.value
                l1 = l1.next
            if l2:
                sum += l2.value
                l2 = l2.next
            if sum > 9:
                jinzhi = 1
                sum -= 10
            head.next = Node(sum)
            head = head.next
        return l.next

#辅助函数,用于将list转为列表
def list_2_lianbiao(input):
    if not input:
        return None
    head = Node(input[0])
    input.pop(0)
    output = head
    while input:
        head.next = Node(input[0])
        head = head.next
        input.pop(0)
    return output


if __name__ == '__main__':
    l1 = list_2_lianbiao([1, 2, 3, 4])
    l2 = list_2_lianbiao([2, 9, 8, 7])
    newS = Solution()
    newl = newS.add_2_number(l1, l2)
    while newl:
        print(newl.value)
        newl = newl.next

相关文章

  • LeetCode第二题:两数相加

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

  • leetcode第二题 —— 两数相加

    1.题目 原题: 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相...

  • Python小白 Leetcode刷题历程 No.1-No

    Python小白 Leetcode刷题历程 No.1-No.5 两数之和、两数相加、无重复字符的最长子...

  • LeetCode | 2.两数相加

    这次来写一下 LeetCode 的第 2 题,两数相加。 题目描述 题目直接从 LeetCode 上截图过来,题目...

  • LeetCode算法题:两数相加

    需求 两数相加: 思路 链表是倒序存储数值,432 在链表存储是2-3-4,当求和之后,还需将值转成链表,1.根据...

  • LeetCode刷题-两数相加

    前言说明 算法学习,日常刷题记录。 题目连接 两数相加[https://leetcode-cn.com/probl...

  • 两数的和,链表

    hot 100 meddium 1. 第二题 两数字相加 见原题:https://leetcode-cn.com/...

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

    LeetCode第2题:两数相加 Ps:本系列文章只为记录自己刷LeetCode过程中的解题过程和思路。 题目来源...

  • 两数相加 II(golang)

    原题:两数相加 II 使用栈,其它与两数相加(golang)类似

  • leetcode第2题:两数相加

    题目描述 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的...

网友评论

    本文标题:leetcode第二题 —— 两数相加

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