分享
  1. 首页
  2. 文章

leetcode-hot-(2/100)

zhangshaos · · 1413 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

2/100-两数相加

题目描述

image.png

go to leetcode

分析解答

从题目描述中,联想到CPU的加法器:每个链表代表一个数字,每个节点则表示一位数字。
因此,我们可以模拟CPU,也设立一个进位标志位carry
对于合并后的新节点,节点的值value = 对应位置两个节点的value和 + carry

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
 // 1.for each reverse-list l1, l2:
 // new node's val = l1.val + l2.val + carry(初值为0)
 // carry = new carry
 // 2.handle left reverse-list
 var (
 head, tail *ListNode
 carry = 0
 )
 p1, p2 := l1, l2
 for p1 != nil && p2 != nil {
 if head == nil {
 tail = new(ListNode)
 head = tail
 } else {
 tail.Next = new(ListNode)
 tail = tail.Next
 }
 sum := p1.Val + p2.Val + carry
 tail.Val = sum % 10
 carry = sum / 10
 p1 = p1.Next
 p2 = p2.Next
 }
 for p1 != nil {
 tail.Next = new(ListNode)
 tail = tail.Next
 sum := p1.Val + carry
 tail.Val = sum % 10
 carry = sum / 10
 p1 = p1.Next
 }
 for p2 != nil {
 tail.Next = new(ListNode)
 tail = tail.Next
 sum := p2.Val + carry
 tail.Val = sum % 10
 carry = sum / 10
 p2 = p2.Next
 }
 if carry != 0 {
 tail.Next = new(ListNode)
 tail = tail.Next
 tail.Val = carry
 carry = 0
 }
 return head
}

反思

进位的思想可以推广到其他有限容量的操作上。
例如B+树的分裂:
后续遍历,插入节点,"计算进位",然后对父节点同样处理进位


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:zhangshaos

查看原文:leetcode-hot-(2/100)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1413 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏