当前位置: 首页 > article >正文

【链表】力扣 2. 两数相加

一、题目

在这里插入图片描述
在这里插入图片描述

二、思路

  • 当两个节点的 val 进行相加时有可能会产生进位,由于每个节点只能存储 一位 数字,因此,当进位产生时,只会向下一节点 进位1。
  • 整个问题可以分解为:将对齐后的链表相应节点进行 val 相加,再加上由上一次产生的进位(初始进位设为 0)。这样便把原来较大的原问题,划分成了多个与原问题相似的规模更小的子问题。因此,可以采用 递归 来解决。

三、题解

/**
 * Definition for singly-linked list.
 * 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; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        return addTwo(l1, l2, 0);
    }
    public ListNode addTwo(ListNode l1, ListNode l2, int carry) {
        // 递归出口:只有当两个链表的节点都为 null 时,才不用将这两个节点的 val 进行相加的操作
        //          但需要考虑上一位产生的进位问题
        if (l1 == null && l2 == null) {
            // 进位为 0 返回给上一级为 null,否则新创建一个值为 进位 的一个节点
            return carry == 0 ? null : new ListNode(carry);
        }
        // 不妨一直用 l1 来表示两个链表中较长的那个链表,最后 return l1
        if (l1 == null) {// 上面的递归出口已经排除了两个链表都为 null 的情况
            l1 = l2;
            l2 = null;
        }
        int sum = l1.val + (l2 == null ? 0 : l2.val) + carry;
        l1.val = sum % 10;
        carry = sum /10;
        l1.next = addTwo(l1.next, l2 == null ? null : l2.next, carry);
        return l1;
    }
}

http://www.kler.cn/a/419163.html

相关文章:

  • smb cifs samba smbpasswd 笔记241127
  • 【青牛科技】2K02 电动工具专用调速电路芯片描述
  • ceph 报错 crush rule 20 type does not match pool
  • pycharm链接neo4j(导入文件)
  • Java编程类与对象:从基础语法到高级特性
  • 学习笔记043——HashMap源码学习1
  • 基于yolov8、yolov5的吸烟行为检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 如何在 VPS 上使用 Git 设置自动部署
  • linux cenos redis 单机部署
  • 【Linux】磁盘 | 文件系统 | inode
  • 图解人工智能:从规则到深度学习的全景解析
  • LabVIEW将TXT文本转换为CSV格式(多行多列)
  • digit_eye开发记录(3): C语言读取MNIST数据集
  • EtherCAT转DeviceNe台达MH2与欧姆龙CJ1W-DRM21通讯案例
  • grpc与rpcx的区别
  • Qt 面试题学习13_2024-12-1
  • 第n小的质数
  • 【韩顺平老师Java反射笔记】
  • SpringBoot 助力新冠密接者跟踪:大数据整合与深度挖掘的力量
  • 极致性能:19个Vue 项目的优化手段
  • C++关于二叉树的具体实现
  • (4)CHATGPT-3和GPT-4是生成式AI的一部分吗?
  • 【二分查找】力扣 2529. 正整数和负整数的最大计数
  • HTML CSS JS基础考试题与答案
  • springboot kafka在kafka server AUTH变动后consumer自动销毁
  • linux系统信号简介