找回密码
 立即注册
查看: 278|回复: 0

【唐老狮】Unity、C# 每日一题 NO.2

[复制链接]
发表于 2022-6-13 11:46 | 显示全部楼层 |阅读模式
题目

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



链表类



在函数中实现要求

规则示例

规则:


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

输出:[8,9,9,9,0,0,0,1]
解释:9999999 + 9999 = 10009998

解题分析

我们以 352 + 56 举例分析



题目要求我们用两个链表相加得到一个新的链表,而链表中数字的顺序是从低位开始存储。刚好满足了我们做十进制加法的规则:从低位开始加
十进制加法的关键规则:

1.低位结果= (A + B + 上一位进位数) % 10
2.进位结果= (A + B + 上一位进位数) /  10
举例分析:
352 + 56
个位相加:
个位计算结果 = (2 + 6 + 上一位进位数0) % 10 = 8
个位进位结果 = (2 + 6 + 上一位进位数0)  /  10 = 0


十位相加:
十位计算结果 = (5 + 5 + 上一位进位数0) % 10 = 0
十位进位结果 = (5 + 5 + 上一位进位数0)  / 10 = 1


百位相加:

百位计算结果 = (3 + 0 + 上一位进位数1) % 10 = 4
百位进位结果 = (3 + 0 + 上一位进位数1)  /  10 = 0


L1和L2链表的下一位都是null
并且进位结果为0时
就证明我们不需要再往下计算了
于是得到结果:352 + 56 = 408

分步解题

第一步:声明用于返回的链表头节点以及用于计算的临时节点


第二步:通过上面的分析,每一位计算需要有上一位的进位数carry参与


第三步:构建计算每一位的循环

什么时候会不停计算?
L1还有节点 || L2还有节点 || 上一位有进位


第四步:进行每一位的计算
遵循十进制加法的关键规则:
1.低位结果= (A + B + 上一位进位数) % 10
2.进位结果= (A + B + 上一位进位数) /  10



<hr/>关注 唐老狮 获取更多干货内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 08:31 , Processed in 0.068018 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表