leetcode hot100 之【LeetCode 2. 两数相加】 java实现

embedded/2024/10/22 4:30:32/

LeetCode 2. 两数相加

题目描述

给你两个非空的链表,表示两个非负整数。它们每位数字都是按逆序的方式存储的,也就是最左边的数字是最低位的数字。请你将这两个数相加,并以相同逆序的方式返回一个新的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

提示:

  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 链表的长度在范围 [1, 100]

Java 实现解法

方法:模拟加法过程
java">/*** 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) {ListNode dummyHead = new ListNode(0);ListNode p = l1, q = l2, current = dummyHead;int carry = 0;while (p != null || q != null) {int x = (p != null) ? p.val : 0;int y = (q != null) ? q.val : 0;int sum = carry + x + y;carry = sum / 10;current.next = new ListNode(sum % 10);current = current.next;if (p != null) p = p.next;if (q != null) q = q.next;}if (carry > 0) {current.next = new ListNode(carry);}return dummyHead.next;}
}

解题思路

  • 模拟加法过程:从头节点开始,遍历两个链表,对应节点的值相加,并考虑进位。
    • 初始化一个虚拟头节点 dummyHead,用于简化边界情况处理。
    • 初始化两个指针 pq 分别指向两个链表的头节点,以及一个指针 current 指向 dummyHead
    • 初始化一个变量 carry 用于存储进位。
    • 在循环中,计算当前位的和 sum,并更新进位 carry
    • 创建一个新的节点 current.next 存储当前位的和(不包括进位)。
    • 更新 pq 指针到下一个节点,并将 current 指针前移。
    • 如果最后还有进位,创建一个新的节点存储这个进位。

这种方法的时间复杂度是 O(max(m, n)),其中 mn 分别是两个链表的长度。空间复杂度是 O(max(m, n)),因为我们需要创建一个与较长链表长度相当的新链表来存储结果。这种方法直接模拟了两个数相加的过程,简单且高效。

注:来源leetcode网站


http://www.ppmy.cn/embedded/129464.html

相关文章

[单master节点k8s部署]39.安装mysql

通过下面的命令安装mysql。首先下载mysql的rpm包。mysql-community-release-el7-5.noarch.rpm 这个包的作用是将 MySQL 的官方 YUM 仓库添加到系统中&#xff0c;随后通过yum install来安装mysql。 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm …

连锁收银系统

商淘云连锁管理系统助力连锁企业实现“人货账”全方位数字化管理&#xff0c;它依托连锁品牌进销存管理实现门店订货、线下收银、线上商城、会员营销等一体化管理。 门店订货补货支持连锁直营、加盟 不同门店不同进货价、不同门店不同商品、不同门店在线或者账期支付、门店PC或…

Axios 的基本使用与 Fetch 的比较、在 Vue 项目中使用 Axios 的最佳实践

文章目录 1. 引言2. Axios 的基本使用2.1 安装 Axios2.2 发起 GET 请求2.3 发起 POST 请求2.4 请求拦截器2.5 设置全局配置 3. Axios 与 Fetch 的比较3.1 Axios 与 Fetch 的异同点3.2 Fetch 的基本使用3.3 使用 Fetch 处理 POST 请求 4. 讨论在 Vue 项目中使用 Axios 的最佳实践…

docker 和 containerd 关系

containerd 是一个开源的容器运行时&#xff0c;它是用来管理容器生命周期的守护进程。containerd 支持 Docker 和其他容器格式&#xff0c;并且是许多现代容器编排系统&#xff08;如 Kubernetes&#xff09;的基础组件之一。 containerd 提供了一个命令行工具 ctr&#xff0…

MyBatis 动态 SQL 详解

1. 什么是动态 SQL&#xff1f; 在使用 MyBatis 进行数据库查询时&#xff0c;可能会遇到一些需要根据条件动态生成 SQL 语句的情况。MyBatis 提供了强大的动态 SQL 支持&#xff0c;通过标签和条件语句&#xff0c;可以让 SQL 语句根据不同的输入参数动态生成。这大大提高了代…

通过OpenCV实现 Lucas-Kanade 算法

目录 简介 Lucas-Kanade 光流算法 实现步骤 1. 导入所需库 2. 视频捕捉与初始化 3. 设置特征点参数 4. 创建掩模 5. 光流估计循环 6. 释放资源 结论 简介 在计算机视觉领域&#xff0c;光流估计是一种追踪物体运动的技术。它通过比较连续帧之间的像素强度变化来估计图…

Python数据分析工具OpenCV用法示例

Python数据分析工具OpenCV是一个强大的计算机视觉库&#xff0c;提供了丰富的图像处理算法和功能&#xff0c;支持多种编程语言&#xff0c;包括Python、C、C#等。以下是OpenCV在Python中的一些常见用法示例&#xff1a; 一、图像读取、显示与保存 读取图像 import cv2 im…

Springboot中基于 IP 地址的请求速率限制拦截器

基于 IP 地址的请求速率限制拦截器&#xff0c;使用了 Bucket4j 库来管理请求的令牌桶。下面是对代码的详细解释&#xff0c;以及如何在触发请求拒绝时将 IP 地址加入黑名单的实现。 导入依赖 <dependency><groupId>com.github.vladimir-bukhtoyarov</groupId…