【算法题目】Leetcode算法题思路:两数相加

2023-11-01

在LeetCode上刷了一题比较基础的算法题,一开始也能解出来,不过在解题过程中用了比较多的if判断,看起来代码比较差,经过思考和改进把原来的算法优化了。

 

题目:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
 
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
 
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
 
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
 
思路:
因为两个链表的大小不一定相同,所以这样不利于循环的时候对同一位置的数进行计算,所以采取补0的措施:
 
原链表一:1 -> 5 -> 3 -> 2 = 2351
原链表二:5 -> 6 -> 9         = 965
 
补0后:
 
原链表一:1 -> 5 -> 3 -> 2 -> null  = 2351
原链表二:5 -> 6 -> 9 -> 0 -> null = 0965
 
这样补0后数大小没有改变,在循环的时候反而能更好处理,而不用判断两个链表同一节点上其中一个是否为空。
 
然后使用循环对链表进行遍历,计算同一节点的两个数字相加,把相加的数赋值给新链表的同一节点。如果有进位,相加的数值保留个位,下一次遍历的时候,两个节点相加还要加一。
 
上面的补0后的链表,可以看出,最终循环结束是当链表一的next和链表二的next为null,反过来说就是当链表一的next不等于链表二的next时要一直循环。
 
下面贴上代码:
 
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        // node是头结点,node.next才是真正的结点开始
        ListNode node = new ListNode(0);
        // 0结点,其中任意一个结点长度不一致使用0结点补充
        ListNode zero = new ListNode(0);
        // 指针
        ListNode point = node;
        
        // node1 + node2 + level的数值相加总和
        int sum = 0;
        // 进位标志
        int level = 0;
        
        do{           
            point.next = new ListNode(0);
            point = point.next;
            
            sum = l1.val + l2.val + level;
            level = sum / 10;
            point.val = sum % 10;
            
            l1 = l1.next == null ? zero : l1.next;
            l2 = l2.next == null ? zero : l2.next;
            
        } while(l1 != l2);
        
        if(level == 1) {
            point.next = new ListNode(1);
        }
        
        return node.next;
    }
}

 

这里重点说一下

(1)level = sum / 10 :对10整除,那么就得到了进位数,如果sum小于10,则会得到0。

(2)point.val = sum % 10 :对10去余,得到个位数的值。

 

 
 
 

转载于:https://www.cnblogs.com/nicojerry/p/10941927.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【算法题目】Leetcode算法题思路:两数相加 的相关文章

  • Mysql 数据库

    数据库基础 1 什么是数据库 用来存储数据 数据库可在硬盘及内存中存储数据 数据库与文件存储数据的区别 数据库本质也是通过文件来存储数据 数据库的概念就是系统的管理存储数据的文件 数据库介绍 本质就是存储数据的C S架构的socket套接字
  • 算法--将数组分成和相等的多个子数组,求子数组的最大个数

    作者 陈太汉 一个整数数组 长度为n 将其分为m份 使各份的和相等 求m的最大值 比如 3 2 4 3 6 可以分成 3 2 4 3 6 m 1 3 6 2 4 3 m 2 3 3 2 4 6 m 3 所以m的最大值为3 算法 原理的思想是
  • 将二叉树转为有序的双向链表

    一 题目要求 输入一棵二叉排序树 现在要将该二叉排序树转换成一个有序的双向链表 而且在转换的过程中 不能创建任何新的结点 只能调整树中的结点指针的指向来实现 include
  • 白盒测试相关的一些知识

    在白盒测试中 可以使用各种测试方法进行测试 下面这篇文章 可能比较枯燥 如果不乐意读 可以先收藏 如果在你的工作中真遇到白盒测试的话 可以回过头再来看看 还是值得读一读 一般来说 白盒测试时要考虑以下5个问题 1 测试中尽量先用自动化工具来
  • DDP入门

    DDP 即动态动态规划 可以用于解决一类带修改的DP问题 我们从一个比较简单的东西入手 最大子段和 带修改的最大子段和其实是常规问题了 经典的解决方法是用线段树维护从左 右开始的最大子段和和区间最大子段和 然后进行合并 现在我们换一种方法来
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • 数据结构小白之插入排序算法

    1 插入排序 1 1 思路 将n个需要排序的元素看成两个部分 一个是有序部分 一个是无序部分 开始的时候有序表只有一个元素 无序表有n 1个元素 排序过程中每次从无序表中取出元素 然后插入到有序表的适当位置 从而成为新的有序表 类似排队 如
  • 以太坊系列之十五: 以太坊数据库

    以太坊数据库中都存了什么 以太坊使用的数据库是一个NOSQL数据库 是谷歌提供的开源数据leveldb 这里尝试通过分析以太坊数据库存储了什么来分析以太坊可能为我们提供哪些关于区块链的API 存储内容 NOSQL是一个key value数据
  • JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候 去了一家公司面试 面试官现场考了我这道题 我记忆深刻 当时没有想到思路 毫无疑问被面试官当成菜鸟了 最近刚好在研究数组的各种算法实现 就想到这道题 可以拿来实现一下 纪念自己逝去的青春 需求 假设有这样一个数
  • 算法问题实战策略

    算法问题实战策略 基本信息作者 韩 具宗万 译者 崔盛一出版社 人民邮电出版社ISBN 9787115384621上架时间 2015 2 4出版日期 2015 年3月开本 16开页码 738版次 1 1 内容简介 算法问题实战策略 本书收录
  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • 用指针访问一维数组

    文章目录 顺序查找 数组方式实现 指针实现方式 对一位数组元素的访问有三种方式 指针变量的关系运算 引例 数组实现方式 主函数 指针实现方式 主函数 一维数组作为函数的参数 实际应用 顺序查找 要求用指针实现 在整数集合r中顺序查找与给定值
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • 索引优化之Explain 及慢查询日志

    索引 本质是数据结构 简单理解为 排好序的快速查找数据结构 以索引文件的形式存储在磁盘中 目的 提高数据查询的效率 优化查询性能 就像书的目录一样 优势 提高检索效率 降低IO成本 排好序的表 降低CPU的消耗劣势 索引实际也是一张表 该表
  • 基数排序代码实现

    详情请看排序总结 传送门 https blog csdn net m0 52711790 article details 121914543 基数排序的知识点我就不贴出来 相信都能搜到对应概念解释 下面就直接上代码 代码解释其实也很清晰了
  • 雪糕的最大数量 排序+贪心

    雪糕的最大数量 雪糕的最大数量 题目描述 样例 数据范围 思路 代码 题目描述 夏日炎炎 小男孩 Tony 想买一些雪糕消消暑 商店中新到 n 支雪糕 用长度为 n 的数组 costs 表示雪糕的定价 其中 costs i 表示第 i 支雪
  • Leetcode2661. 找出叠涂元素

    Every day a Leetcode 题目来源 2661 找出叠涂元素 解法1 哈希 题目很绕 理解题意后就很简单 由于矩阵 mat 中每一个元素都不同 并且都在数组 arr 中 所以首先我们用一个哈希表 hash 来存储 mat 中每
  • 牛客剑指offer刷题其他算法篇

    文章目录 构建乘积数组 题目 思路 代码实现 第一个只出现一次的字符
  • 按照层次遍历结果打印完全二叉树

    按照层次遍历结果打印完全二叉树 按照推论结果 l 层首个节点位置 2 h l 1 l 层节点间距 2 h l 1 1 编码实现 public static
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • vue中如何保留字符串中的空格

    有的时候的一些需求是需要你保留后端返回的字符串中的空格的 可当我们用指令v html直接将后端返回的字符串渲染到页面时 它会自动清除掉字符串中的空格 解决方案 css样式处理 white space pre wrap
  • WebStorm中如何将自己的代码上传到github

    tips 我用的是2020 1版本的webstorm 2020 1以后的跟着操作没问题 其他版本的网上还有很多方法 第一步 进入File gt Setting gt 搜索git 如图 然后将此处的路径添加为Git安装目录中cmd中的git
  • Android ObjectBox 数据库避坑Duplicate files copied in APK lib/armeabi-v7a/libobjectbox.so

    传说比所有的数据库都快点Objectbox 坑还是有的 搞了一天 官网给的文档真的坑 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfig c
  • 携程等企业实施远程办公获好评,TeamViewer协助解决远程办公难题

    近期 携程集团宣布将从3月起实行混合办公制 允许员工每周三和周五选择1 2天远程办公 这一消息引发业内外的广泛关注 许多人对此给予了高度认可 无疑 远程办公的灵活与便捷既可改善员工的通勤状况 也能较好地平衡员工的工作和生活 不过 与远程办公
  • Flask-sqlalchemy增删改查之(删除数据)

    Flask sqlalchemy增删改查之 删除数据 类似更新数据 也存在两种删除数据的方案 1 先查询 再删除 对应SQL中的 先select 再delete 2 基于过滤条件的删除 推荐方案 对应SQL中的 delete xx wher
  • 关系型数据库表与表之间的三种关系

    一 一对一关系 定义 有两个表 在第一个表中的某一行只与第二个表中的一行相关 同时第二个表中的某一行 也只与第一个表中的一行相关 我们称这两个表为一对一关系 例如 第一张表 ID 姓名 国籍 贡献 1001 王大锤 中国 万万没想到 100
  • FPGA面试题目笔记(四)—— 序列检测器、跨时钟域中的格雷码、乒乓操作、降低静动态损耗、定点化无损误差、恢复时间和移除时间

    文章目录 1 序列检测器 1 1 状态机实现序列检测器 1 11不重叠检测和重叠检测 1 1 2 verilog实现 1 1 3 tb文件 1 1 4 如何衡量设备的完备性 1 2 用移位操作实现循环序列发生器 2 最高工作频率与最小工作周
  • electron 应用开发优秀实践

    vivo 互联网前端团队 Yang Kun 一 背景 在团队中 我们因业务发展 需要用到桌面端技术 如离线可用 调用桌面系统能力 什么是桌面端开发 一句话概括就是 以 Windows macOS 和 Linux 为操作系统的软件开发 对此我
  • 循环队列来了解一下!!

    笔者在之前的一篇文章 详细的介绍了 队列之单向链表与双向链表的模拟实现 https blog csdn net weixin 64308540 article details 128742090 spm 1001 2014 3001 550
  • Qtcreator常用快捷键

    qtcreator常用快捷键 1 代码补全 2 切换已打开的文件 3 快速添加方法实体 cpp 声明 4 修改变量名 并应用到所有使用该变量的地方 5 快速打开输出窗口 6 快速切换模式 7 书签功能 8 分栏显示 9 快速重写父类方法 1
  • python学习笔记---正则表达式【廖雪峰】

    正则表达式 正则表达式是一种用来匹配字符串的强有力的武器 它的设计思想是用一种描述性的语言来给字符串定义一个规则 凡是符合规则的字符串 我们就认为它 匹配 了 否则 该字符串就是不合法的 我们判断一个字符串是否是合法的Email的方法是 创
  • Linux-0.12内核打开文件过程--sys_open源码分析

    上图展示了进程打开文件使用的内核数据结构 所以要打开文件 就要构造上图中的关系 int sys open const char filename int flag int mode struct m inode inode struct f
  • js逆向教程1:某某威客登录

    假设不会js语法来进行js破解 本文感谢挖掘机小王子提供的帮助 挖掘机小王子的github https github com EnjoyScraping 网站的登录接口 我们可以准备一组常用的账号密码 并记下对应的MD5 base64等密文
  • 如何计算无线天线长度

    天线长度为波长的1 4 波长 波速 频率 波速 光速 3 100000000 eg 频率为476 3 则天线长度 300 476 3 4 0 1574 m
  • 洛谷 P2249 【深基13.例1】查找

    题目链接 https www luogu com cn problem P2249 include
  • Nginx极简使用

    编译源码安装Nginx 确认系统版本 确认网络 确认yum可用 确认防火墙 确认SELinux 并关闭 安装依赖库和运行环境 下载安装Nginx Nginx源码编译 查看目录结构 生成编译文件makefile 编译 安装 展示nginx的目
  • 【HTSl】A系统开发总结~致敬这热烈的夏季

    2019的六七八月 我陪伴着A系统一起走过这个炎热的夏季 从单一的功能 完成了华丽的蜕变 迎来了我们的成长 经过历时将近两个月的紧张开发 终于迎来了A系统上线 疲惫的身体得到的暂时的缓解 会想这一个月的开发 感觉收获很多 抱怨也很多 在这个
  • SpringBoot2.7.2 版本配置swagger3的方法及教程

    原因 对SpringBoot2 7 2版本 swagger2 x版本不再适用 所以就选择了swagger3版本 但是相较于swagger2版本 swagger3版本更加麻烦 具体教程如下 方法 第一步 引入依赖
  • 【计算机毕业设计】java ssm在线学习系统 在线学习平台

    毕设帮助 源码交流 技术解答 见文末 一 前言 以前 我们的在线学习主要是通过面对面的讲授 这样 有很多优势 教师可以与学生直接交流 但是也有许多不尽人意的地方 课堂在线学习很大程度上受到时间和空间的限制 浪费了在线学习资源同时对于学生的进
  • 【算法题目】Leetcode算法题思路:两数相加

    在LeetCode上刷了一题比较基础的算法题 一开始也能解出来 不过在解题过程中用了比较多的if判断 看起来代码比较差 经过思考和改进把原来的算法优化了 题目 给出两个 非空 的链表用来表示两个非负的整数 其中 它们各自的位数是按照 逆序