首页 > 其他分享 >【每日一题】两数相加

【每日一题】两数相加

时间:2024-05-07 20:00:45浏览次数:16  
标签:ListNode val 相加 next l2 l1 Optional 每日

2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

示例 1:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

这题用python写真的很方便。。看了下官方思路是逐位加,关键在于进位。我的就是很直接的取数相加再保存。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:        
        def getNum(l: Optional[ListNode]) -> int:
            cnt = num = 0
            while l:
                num += l.val * 10 ** cnt
                cnt += 1
                l = l.next
            return num 
        ans = str(getNum(l1) + getNum(l2))[::-1]

        l3 = p = ListNode(int(ans[0]))
        for i in ans[1:]:
            node = ListNode(int(i))
            p.next = node
            p = p.next
        return l3

用官方题解的思路写了个递归:

class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode], carry = 0) -> Optional[ListNode]:  
        if l1 is None and l2 is None: # 递归边界 l1和l2都是空节点
            return ListNode(carry) if carry else None
        if l1 is None: # l1为空,l2不为空
            l1, l2 = l2, l1 # 保证l1不为空,简化代码
        carry += l1.val + (l2.val if l2 else 0)
        l1.val = carry % 10 # 在原链表操作
        l1.next = self.addTwoNumbers(l1.next, l2.next if l2 else None, carry // 10) # 进位 
        return l1 

 

标签:ListNode,val,相加,next,l2,l1,Optional,每日
From: https://www.cnblogs.com/Aikoin/p/18178260

相关文章

  • [每日AI·0506]巴菲特谈 AI,李飞飞创业,苹果或将推出 AI 功能,ChatGPT 版搜索引擎
    AI资讯苹果或将推出AI功能,随iPhone发布2024年巴菲特股东大会,巴菲特将AI类比为核技术巴菲特股东大会5万字实录消息称OpenAI将于5月9日发布ChatGPT版搜索引擎路透社消息,斯坦福大学AI领军人物李飞飞打造“空间智能”创业公司报道地址爆款生成式AI硬件,......
  • 大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题
    大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题之后会不定期更新每日一题sql系列。SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合。1.题目问题1:如下为某直播平台各主播的开播及关播时间数据明细,现在需要计算该平......
  • 架构每日一学 3:架构师六个生存法则之一:如何找到唯一且正确的架构目标?(二)
    本文首发于公众号:腐烂的橘子上一篇文章中,我们讨论了架构师第一个生存法则:必须有且仅有一个目标。今天我们主要讨论下如何找到这个目标。确认一个正确目标且要试图逼近它每一个企业的第一任务首先是活下来,然后再盈利。那么想活下来就得保证,架构活动是能为企业带来长期生存优势......
  • 每日
    操作系统:现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。一般而言,现代计算机系统是一个复杂的系统。其一:如果每位应用程序员都必须掌握该系统所有的细节,那就不可能再编写代码了(严重影响了程序员的开发效率:全部掌握这......
  • 架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)
    本文首发于公众号:腐烂的橘子为什么有的架构活动没有正确的目标?在每个架构活动启动之前,必须有且仅有一个正确的目标,这是架构设计的起点[1]。何为正确?正确就是要与公司的战略目标相匹配。否则系统会变得复杂和无序。架构活动为什么需要目标?看看下面的情形你是否遇到过:公司一......
  • 【每日一题】快照数组
    1146.快照数组实现支持下列接口的「快照数组」- SnapshotArray:SnapshotArray(intlength) -初始化一个与指定长度相等的类数组的数据结构。初始时,每个元素都等于 0。voidset(index,val) -会将指定索引 index 处的元素设置为 val。intsnap() -获取该数组的快......
  • 架构每日一学 1:成为一名架构师,你必须具有“战略意图”
    本文首发于公众号:腐烂的橘子前言最近学习了《郭东白的架构课》,受益良多。作为一名普通程序员,有时候不禁想问公司里的架构师大牛是怎么成长的,为什么他可以是一名架构师,而我们只能在公司里写代码做需求?郭在文章中提出了很多超出以往认知的观点,让我重新审视了架构师这个职业。除......
  • 【每日一题】总行驶距离
    2739.总行驶距离卡车有两个油箱。给你两个整数,mainTank表示主油箱中的燃料(以升为单位),additionalTank表示副油箱中的燃料(以升为单位)。该卡车每耗费1升燃料都可以行驶10km。每当主油箱使用了5升燃料时,如果副油箱至少有1升燃料,则会将1升燃料从副油箱转移到主油箱。......
  • 【每日一题】感染二叉树需要的总时间
    2385.感染二叉树需要的总时间给你一棵二叉树的根节点root,二叉树中节点的值互不相同。另给你一个整数start。在第0分钟,感染将会从值为start的节点开始爆发。每分钟,如果节点满足以下全部条件,就会被感染:节点此前还没有感染。节点与一个已感染节点相邻。返回感染......
  • 力扣-258. 各位相加
    1.题目题目地址(258.各位相加-力扣(LeetCode))https://leetcode.cn/problems/add-digits/?envType=study-plan-v2&envId=primers-list题目描述给定一个非负整数num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 示例1:输入:num=38输出:2解释:各位......