LeetCode题2两数相加
分析
题目比较简单,就是两个数相加求和。按照加法思想,同时遍历两个链表,从个位一直加到最高位即可。比如要计算352+99
,步骤如下:
- 最低位
2+9
得11
,需进位,个位保留1
,进位1
先存储 5+9
得14
,再加上刚刚的进位1
,得到15
,本位保留5
,进位1
先存储3+0
(注意此时99
的位数已经用完了,但是352
还有一位,所以这里可以将99
的这一位看作0
)得3
,再加上刚刚的进位1
,得到4
- 将前面几步中的数字按照顺序排列,可得到
451
。
观察上述过程,一个容易出错的地方,在于加法进位的处理。另外一个难点,在于位数的处理,两个链表长度不一,结果链表的长度也只有把前面所有位数加完才确定。
一种实现
function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null { const result = new ListNode(0, null); let p1 = l1; let p2 = l2; let cursor = result; while(p1 || p2 || cursor) { const result = cursor.val + (p1?.val ?? 0) + (p2?.val ?? 0); let tenDigit = result >= 10 ? 1 : 0; let singleDigit = result % 10; p1 = p1?.next ?? null; p2 = p2?.next ?? null; cursor.val = singleDigit; cursor.next = (p1 || p2 || tenDigit > 0) ? new ListNode(tenDigit, null) : null; cursor = cursor.next; } return result; }
文完撒花🎉!感谢观看👏!
本文作者:暮重云
本文链接:https://www.cnblogs.com/fengyinxu/p/leetcode-problem-2-add-two-numbers.html
版权声明:本作品采用【知识共享署名-非商业性使用-禁止演绎4.0国际】许可协议进行许可。
分类:
LeetCode题解
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步