IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode第二题,两数相加 -> 正文阅读

[数据结构与算法]LeetCode第二题,两数相加

题目

????????给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0?开头。

?解题

解法一:老实人

? ? ? ? (抛开ListNode)将输入转换为整数,相加后返回成列表。

def addTwoNumbers(l1, l2):
    l1 = l1[::-1]
    l2 = l2[::-1]
    n1 = len(l1)
    n2 = len(l2)
    result1 = 0
    result2 = 0
    for i in l1:
        n1 -= 1
        result1 += i * pow(10, n1)
    for i in l2:
        n2 -= 1
        result2 += i * pow(10, n2) 
    result = result1 + result2
    result = list(str(result))
    a = []
    for i in result:
        a.append(int(i))
    return a[::-1]

? ? ? ? 然后就会发现,三个样例都没问题,你觉得你行了,但是你试试下面这个...

l1 = [1,0,0,1]
l2 = [1,0,1]
result = addTwoNumbers(l1, l2)
print(result)

? ? ? ? 结果就是那么不尽如人意了?,这就是这个方法的不足之处。

解法二:ListNode

? ? ? ? 首先看一下ListNode的定义:

struct ListNode {
       int val;    //定义val变量值,存储节点值
       struct ListNode *next;   //定义next指针,指向下一个节点,维持节点连接
  }

? ? ? ? 然后看一下代码实现:

def addTwoNumbers(l1, l2):
    head = ListNode(l1.val + l2.val) #val是这个节点的值,next是指向下一节点的指针
    cur = head # cur表示当前节点
    while l1.next or l2.next: # 遍历l1和l2
        l1 = l1.next if l1.next else ListNode()
        l2 = l2.next if l2.next else ListNode()
        cur.next = ListNode(l1.val + l2.val + cur.val // 10) # 有无进位
        cur.val = cur.val % 10
        cur = cur.next
    if cur.val >= 10: # 最后一位有无进位
        cur.next = ListNode(cur.val // 10)
        cur.val = cur.val % 10
    return head

? ? ? ? 可以放到LeetCode上面跑,想在VScode上面运行的话,会显示'ListNode' is not defined的错误,可以参考https://leetcode-cn.com/circle/article/s3RcOW/尝试解决。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 14:50:26  更:2021-07-29 14:50:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 15:50:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码