【刷题日记】2. 两数相加

简介: 本次刷题日记的第 6 篇,力扣题为:2. 两数相加 ,中等

【刷题日记】2. 两数相加

本次刷题日记的第 6 篇,力扣题为:2. 两数相加中等

一、题目描述:

image.png

看到题目,给人的感觉是,两个数相加?what? 不就是两个数相加吗?这有啥难度,咋还中等


然而仔细查看具体题目内容和具体的示例之后,感觉还是蛮简单的,但是好像不知道咋写,如果 C 语言基础比较差的兄弟们(不知道链表咋玩的那种),这个题可能就不太好写


不过,这题确实也比较简单,有一定的 C 语言基础的兄弟,刷起来 soso 的,没啥压力,不过我们还是来分析和推演一下,不会的兄弟,也能会

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

我们先看看题目给我们暴露的信息有哪些:

  • 给出的两个链表都是非空的,表示的数字是整数,且不是负数
  • 链表的每一个节点只会存放一个整数,数字是 1 位数的 ,并且整个链表不会以 0 开头,除非链表只有一个节点,这个节点才有可能是 0
  • 链表的顺序和正常给出的数字顺序是相反的,高位在链表尾,低位在链表头

有这些已知信息后,我们稍加思考一下,可以用正常的整数来模拟和推演一下

以示例 3 为例:

css

复制代码

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

image.png

如图,我们可以看出来,其实就是很基本的小学学过的加法题的变种,咱们这次只是吧数字给翻转过来了,高位变到右边,低位变到左边

那么进位的话,以前是向左边进 1 位,此时,咱们就需要向右边进 1 位

再演变到链表的话,逻辑完全一下,剩下的确实只是编码上的实现问题了,基础差的兄弟可能就不太好写,不过没事,多练,多练,多思考,就习惯了


2、尝试编码

根据上述的逻辑和推演,其实思想很简单,就是 2 个数字每个位对应相应,注意进位问题,注意高位在右边的问题即可

// 返回的链表 先指定一个头指针
func addTwoNumbers(l1, l2 *ListNode) (head *ListNode) {
    // 先定义一个尾指针
    var tail *ListNode
    // 进位 ,默认为 0
    carry := 0
    // 校验 2 条链表,若有一个链表为空 则直接退出循环
    for l1 != nil || l2 != nil {
        n1, n2 := 0, 0
        if l1 != nil {
            n1 = l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            n2 = l2.Val
            l2 = l2.Next
        }
        sum := n1 + n2 + carry
        sum, carry = sum%10, sum/10
        if head == nil {
            head = &ListNode{Val: sum}
            tail = head
        } else {
            tail.Next = &ListNode{Val: sum}
            tail = tail.Next
        }
    }
    // 基本链表已经形成,最后校验最后一个位是否有进位,若有,则放在链表尾即可
    if carry > 0 {
        tail.Next = &ListNode{Val: carry}
    }
    return
}

此处的话,代码中,已经写上对应注释,还是简单说一下:

  • 一开始,先建立一个 头指针 head ,一个 尾指针
  • 校验链表符合条件之后,分别取出两个链表的头指针数据,进行相加,若有进位,则将进位复制到 carry 中
  • 定对应位上两数之和后,若 head 为空,则将结果给到 head,并且此时 tail也指向 head (因为此时链表中就 1 个节点)
  • 若 head 不为空,则将结果给到 tail 的下一个节点,再将 tail 指向目前的尾巴节点

四、总结:

该题虽然是中等类型的题目,不过思路还是比较简单和明确的,相对其他中等题来说没有那么复杂,只需要考虑好细节和进位问题即可


欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
16天前
|
存储 缓存 监控
MySQL服务器配置优化:my.cnf参数调优指南
本文深入解析了MySQL核心配置参数及性能优化技巧,涵盖内存结构、调优原则、存储引擎优化、查询性能优化等内容,通过实战案例帮助读者构建高性能MySQL服务器配置,解决常见的性能瓶颈问题。
|
3月前
|
存储 运维 监控
云服务运行安全创新标杆:阿里云飞天洛神云网络子系统“齐天”再次斩获奖项
阿里云“超大规模云计算网络一体化运行管理平台——齐天系统”凭借卓越的技术创新与实践成果,荣获“云服务运行安全创新成果奖”,同时,齐天团队负责人吕彪获评“全栈型”专家认证。
|
8月前
|
前端开发 UED 开发者
React 模态对话框 Modal Dialog
本文介绍如何在 React 中实现模态对话框,涵盖基本概念、常见问题及解决方案。模态对话框是一种阻止用户与页面其他部分交互的弹出窗口,常用于显示重要信息或收集输入。通过状态管理控制其显示和隐藏,需注意多组件状态同步、关闭行为一致性及样式冲突等问题。文中还介绍了动画效果和键盘导航支持等进阶功能,帮助开发者提升用户体验并确保代码的可维护性。
231 80
|
SQL 存储 前端开发
< 今日份知识点:web常见的攻击方式(网络攻击)有哪些?如何预防?如何防御呢 ? >
网络安全威胁日益严重,2017年的永恒之蓝勒索病毒事件揭示了网络攻击的破坏力。为了防御Web攻击,了解攻击类型至关重要。Web攻击包括XSS、CSRF和SQL注入等,其中XSS分为存储型、反射型和DOM型,允许攻击者通过注入恶意代码窃取用户信息。防止XSS攻击的方法包括输入验证、内容转义和避免浏览器执行恶意代码。CSRF攻击则伪装成用户执行操作,防范措施包括同源策略和CSRF Token验证。SQL注入则通过恶意SQL语句获取数据,预防手段包括输入验证和使用预编译语句。面对网络威胁,加强安全意识和实施防御策略是必要的。
535 0
|
10月前
|
机器学习/深度学习 人工智能 算法
AI赋能大学计划·大模型技术与应用实战学生训练营——吉林大学站圆满结营
10月30日,由中国软件行业校园招聘与实习公共服务平台携手魔搭社区共同举办的AI赋能大学计划·大模型技术与产业趋势高校行AIGC项目实战营·吉林大学站圆满结营。
|
XML Java 数据格式
深入探索Spring的Bean注入:四种方式解析与循环依赖探讨
深入探索Spring的Bean注入:四种方式解析与循环依赖探讨
340 0
|
JavaScript
vue 父组件修改子组件的样式——深度作用选择器 >>> 、 /deep/ 、 ::v-deep
vue 父组件修改子组件的样式——深度作用选择器 >>> 、 /deep/ 、 ::v-deep
436 0
|
Python
路径扫描 -- dirsearch
路径扫描 -- dirsearch
130 0
|
SpringCloudAlibaba 算法 Java
Spring Boot项目如何实现分布式日志链路追踪
作为一名后端开发工程师,排查系统问题用得最多的手段之一就是查看系统日志,在当下主要的分布式集群环境中一般使用ELK(Elasticsearch , Logstash, Kibana)来统一收集日志,以便后续查看日志定位追踪相关问题。但是在并发情况下,大量的系统用户即多线程并发访问后端服务导致同一个请求的日志记录不再是连续相邻的,此时多个请求的日志是一起串行输出到文件中,所以我们筛选出指定请求的全部相关日志还是比较麻烦的,同时当后端异步处理功能逻辑以及微服务的下游服务调用日志追踪也有着相同的问题。
|
机器学习/深度学习 消息中间件 数据安全/隐私保护