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

简介: 【刷题记录】2. 两数相加

一、题目描述


来源 LeetCode


给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。


请你将两个数相加,并以相同形式返回一个表示和的链表。


你可以假设除了数字 0 之外,这两个数都不会以 0 开头。


网络异常,图片无法展示
|


示例 1:


输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8]


解释:342 + 465 = 807.


示例 2:


输入:l1 = [0], l2 = [0] 输出:[0]


示例 3:


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


提示:


  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零


二、思路分析:


这个题目我们实质上可以把它看做成一个数学运算过程 两个数相加的竖式运算过程


网络异常,图片无法展示
|


就像上面图片中


  • l1 就是[3,4] l2 就是[7,2] 链表中对应位置的相加,就是数字运算过程中,由低位向高位相加的一个过程。
  • 如果相加有进位数时候,我们要记录进位数,并且在一次的运行中相加上这个进位数 就是上图中的1(tens)
  • 然后把每次的结果存入到一个新的链表中 比如上图中结果为70 就是 [0,7]


三、代码实现

public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        // 输出结果的链表
        ListNode resultNode = new ListNode(0);
        ListNode head = resultNode;
        // 记录进位数
        int carryNum =0;
while (l1 != null || l2 != null){
            // 判断两个链表中对应位置是否存在值 (可能连个链表位数不一致)
            int num1 = l1 != null ? l1.val : 0;
            int num2 = l2 != null ? l2.val : 0;
            // 对应位置上的数字相加 以及加上进位数
            int tmpnum = num1 + num2 + carryNum;
            // 记录对应数字到链表
            head.next = new ListNode(tmpnum % 10 );
            //获取进位数
            carryNum = tmpnum / 10;
            head = head.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
        }
        // 如果最高位还有进位 补位。
if (carryNum > 0) head.next = new ListNode(carryNum);
        return resultNode.next;
    }
}


运行结果

网络异常,图片无法展示
|


总结


我们可以把问题转化为我们比较熟悉的一个模型,然后能更好的理解和想出解决的方式。

目录
相关文章
|
5月前
【刷题记录】自除数、除自身以外数组的乘积
【刷题记录】自除数、除自身以外数组的乘积
|
8月前
|
存储 算法 测试技术
|
7月前
【LeetCode刷题】两数之和、两数相加
【LeetCode刷题】两数之和、两数相加
|
8月前
|
存储
leetcode代码记录和对比(两数相加
leetcode代码记录和对比(两数相加
29 0
(牛客网)链表相加(二)
假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
63 0
|
存储
每日一题(两数相加)
每日一题(两数相加)
|
Java Python
leetcode每日一题.445:两数相加II
leetcode每日一题.445:两数相加II
92 0
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
118 0
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
力扣刷题记录——326.3的幂、338. 比特位计数、342. 4的幂、350. 两个数组的交集 II
力扣刷题记录——326.3的幂、338. 比特位计数、342. 4的幂、350. 两个数组的交集 II
100 0
力扣刷题记录——326.3的幂、338. 比特位计数、342. 4的幂、350. 两个数组的交集 II

热门文章

最新文章