⭐LeetCode(数学分类) 2. 两数相加——暴力与优化⭐

⭐LeetCode(数学分类) 2. 两数相加——暴力与优化⭐

在这里插入图片描述

在这里插入图片描述

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

题解:

暴力与优化,暴力即转换为十进制解题,优化即直接在链表上进行操作,模拟十进制即可进行进位;

代码:

/*** 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 Solution1 {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode res = new ListNode();// 不用long时由于链表长度可达100会超int 但long依旧超限制long n1 = 0;  long n2 = 0;long stand = 1;while(l1 != null){long tmp = l1.val * stand;n1 += tmp;stand *= 10;l1 = l1.next;}stand = 1;while(l2 != null){long tmp = l2.val * stand;n2 += tmp;stand *= 10;l2 = l2.next;}long n = n1 + n2;if(n == 0){res.val = 0;return res;}ListNode head = res;while(n > 0){int tt = (int)(n % 10);ListNode tmp = new ListNode(tt);head.next = tmp;head = head.next;n /= 10;}return res.next;}
}// 最优解 直接在链表上模拟十进制运算进行加法及进位操作 
// 难点在于模拟过程需要对进位进行合理处理
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {// 保存最终链表头部的指针ListNode res = new ListNode();// 用于帮助构建res的遍历指针ListNode head = res;// 暂存器 用于l1和l2后面均为null时若前一节点有需要进位的1时则置为一 无该情况默认0int extra = 0;// 标志位 用于标志哪一个链表在退出第一个while后还有多余未遍历的节点boolean f1 = false;boolean f2 = false;// 采用双指针统一遍历 模拟十进制加法 遇到进位需额外处理 直到某一链表遍历完全或均遍历完全则退出模拟while(l1 != null && l2 != null){int n1 = l1.val;int n2 = l2.val;int n = n1 + n2;// 发生进位if(n >= 10){int tmp = n % 10;// 及时进1给高位 若l1后不空可进位到l1下一点 若空进到l2下一点// 若后面均空则进位到暂存器extraif(l1.next != null)l1.next.val++;else if(l2.next != null)l2.next.val++;else    extra = 1;ListNode tNode = new ListNode(tmp);head.next = tNode;}// 未进位 直接新增和的节点else{ListNode tNode = new ListNode(n);head.next = tNode;}// head记得要移动head = head.next;// 越界判断 方便while模拟加法过程退出后哪一链表会剩余节点if(l1.next == null && l2.next == null){f1 = true;f2 = true;}else if(l1.next == null){f1 = true;}else if(l2.next == null){f2 = true;}// 固定移动l1 = l1.next;l2 = l2.next;}// 不可直接将余下的直接链接 因可能存在低位向不为null的节点高位+1情况 会导致9->10 故要检查// eg: l1 = [9,9,9,9,9,9,9] l2 = [9,9,9,9] // 不加额外操作输出 [8,9,9,9,10,9,9]// 正确为 [8,9,9,9,0,0,0,1]if(f1 && !f2){if(l2.val == 10){// 标志位 标志l2余下链表是否有东西boolean flag = false;// 若出现上述预测情况 则要进行循环判断 因可能后1进到前1导致前由9->10 故要继续进位while(l2.val == 10){ListNode tNode = new ListNode(0);head.next = tNode;head = head.next;// 后有东西直接进位+1if(l2.next != null){l2 = l2.next;l2.val++;}// 后无东西则创建一新节点即可 同时l2代表遍历完全else{ListNode tmpNode = new ListNode(1);head.next = tmpNode;flag = true;break;}}// 直至余下链表中无10 此时可直接链接if(!flag)head.next = l2;}// 无10 可直接链接else{head.next = l2;}}// 同上else if(!f1 && f2){if(l1.val == 10){// 标志位 标志余下链表是否有东西boolean flag = false;// 若出现上述预测情况 则要进行循环判断 因可能后1进到前1导致前由9->10 故要继续进位while(l1.val == 10){ListNode tNode = new ListNode(0);head.next = tNode;head = head.next;// 后有东西直接进位+1if(l1.next != null){l1 = l1.next;l1.val++;}// 后无东西则创建一新节点即可 同时l1代表遍历完全else{ListNode tmpNode = new ListNode(1);head.next = tmpNode;flag = true;break;}}// 直至余下链表中无10 此时可直接链接if(!flag)head.next = l1;}// 无10 可直接链接else{head.next = l1;}}// 此不存在上述情况 但可能存在extra 故要考虑是否要因进位而多增加一个节点 其val=1else if(f1 && f2){if(extra == 1){ListNode tNode = new ListNode(1);head.next = tNode;}}// res为带头节点的链表 故返回其nextreturn res.next;}
}

结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网https://item.taobao.com/item.htm?ftt&id784749793551 MODBUS TCP 通信单元 MODBUS TCP 转 RS485 MS-A1-50X1 系列概述 MS-A1-50X1 系列概述 MS-A1-50X1系列作为MODBUS TCP通信的服务器进行动作。可通…

基于PyTorch的深度学习——机器学习3

激活函数在神经网络中作用有很多&#xff0c;主要作用是给神经网络提供非线性建模能力。如果没有激活函数&#xff0c;那么再多层的神经网络也只能处理线性可分问题。 在搭建神经网络时&#xff0c;如何选择激活函数&#xff1f;如果搭建的神经网络层数不多&#xff0c;选择si…

力扣:找到一个数字的 K 美丽值(C++)

一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目&#xff1a; 子字符串长度为 k 。子字符串能整除 num 。 给你整数 num 和 k &#xff0c;请你返回 num 的 k 美丽值。 注意&#xff1a; 允许有 前缀 0 。0 不能整除任何值。 一个 子字符串 是一个字符串里…

C/C++蓝桥杯算法真题打卡(Day3)

一、P8598 [蓝桥杯 2013 省 AB] 错误票据 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;int main() {int N;cin >> N; // 读取数据行数unordered_map<int, int> idCount; // 用于统计每个ID出现的次数vector<int> ids; …

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…

C语言八股---预处理,编译,汇编与链接篇

前言 从多个.c文件到达一个可执行文件的四步:   预处理–>编译–>汇编–>链接 预处理 预处理过程就是预处理器处理这些预处理指令(要不然编译器完全不认识),最终会生成 main.i的文件 主要做的事情有如下几点: 展开头文件展开宏条件编译删除注释添加行号等信息保留…

用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏

大家好&#xff01;今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括&#xff1a;控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂&#xff0c;适合初学者学习和实践。 游戏功能概述 玩家控制&#xff1a;使用键…

面向高质量视频生成的扩散模型方法-算法、架构与实现【附核心代码】

目录 算法原理 架构 代码示例 算法原理 正向扩散过程&#xff1a;从真实的视频数据开始&#xff0c;逐步向其中添加噪声&#xff0c;随着时间步 t 的增加&#xff0c;噪声添加得越来越多&#xff0c;最终将原始视频数据变成纯噪声。数学上&#xff0c;t 时刻的视频数据与 t…

水下机器人推进器PID参数整定与MATLAB仿真

水下机器人推进器PID参数整定与MATLAB仿真 1. PID控制原理 目标:通过调节比例(P)、积分(I)、微分(D)参数,使推进器输出力快速稳定跟踪期望值。传递函数(示例):推进器动力学模型可简化为: [ G(s) = \frac{K}{\tau s + 1} \cdot e^{-Ts} ] 其中:K为增益,τ为时间常…

游戏引擎学习第149天

今日回顾与计划 在今天的直播中&#xff0c;我们将继续进行游戏的开发工作&#xff0c;目标是完成资产文件&#xff08;pack file&#xff09;的测试版本。目前&#xff0c;游戏的资源&#xff08;如位图和声音文件&#xff09;是直接从磁盘加载的&#xff0c;而我们正在将其转…

Java函数式接口四部曲之Consumer

Consumer 是一个函数式接口&#xff0c;位于 java.util.function 包中。它表示一个接受单个输入参数并且不返回任何结果的操作。Consumer 通常用于需要对输入参数执行某些操作但不产生返回值的场景。 Consumer 接口定义了一个抽象方法&#xff1a;accept(T t)&#xff1a;接受…

ForceMimic:以力为中心的模仿学习,采用力运动捕捉系统进行接触丰富的操作

25年3月来自上海交大卢策吾教授团队的论文“ForceMimic: Force-Centric Imitation Learning with Force-Motion Capture System for Contact-Rich Manipulation”。 在大多数接触丰富的操作任务中&#xff0c;人类会将随时间变化的力施加到目标物体上&#xff0c;以补偿视觉引…

【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…

vulnhub靶场【digitalworld.local系列】的electrical靶机

前言 靶机&#xff1a;digitalworld.local-electrical&#xff0c;IP地址为192.168.10.12&#xff0c;后期因为卡顿&#xff0c;重新安装&#xff0c;ip地址后面为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机…

macos 程序 运行

sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件

多视图几何--结构恢复--三角测量

三角测量 1. 核心公式推导 假设两个相机的投影矩阵为 P P P 和 P ′ P P′&#xff0c;对应的匹配图像点(同名点)为 ( u , v ) (u, v) (u,v) 和 ( u ′ , v ′ ) (u, v) (u′,v′)&#xff0c;目标是求解三维点 X [ X x , X y , X z , 1 ] T X [X_x, X_y, X_z, 1]^T X…

共享内存的原理和创建

目录 共享内存的原理 共享内存的创建 代码实现创建 共享内存的管理指令 我们今天来学习共享内存&#xff01;&#xff01;&#xff01; 共享内存的原理 两个进程同时使用内存中开辟的共享空间进行通信就是建立并使用共享内存进行进程间的通信。System V 共享内存&#xf…

3.10[A]cv

核心模块&#xff1a; rasterizer&#xff1a;光栅化器&#xff0c;负责三角形遍历和像素绘制Shader&#xff1a;包含顶点着色器和多种片元着色器Texture&#xff1a;纹理处理模块 顶点着色器的计算量一般远小于片元着色器。因为组成三角形的顶点相对有限&#xff0c;而片元需…

mac使用Homebrew安装miniconda(mac搭建python环境),并在IDEA中集成miniconda环境

一、安装Homebrew mac安装brew 二、使用Homebrew安装miniconda brew search condabrew install miniconda安装完成后的截图&#xff1a; # 查看是否安装成功 brew list环境变量&#xff08;无需手动配置&#xff09; 先执行命令看能不能正常返回&#xff0c;如果不能正常…

多视图几何--相机标定--从0-1理解张正友标定法

1基本原理 1.1 单应性矩阵&#xff08;Homography&#xff09;的建立 相机模型&#xff1a;世界坐标系下棋盘格平面&#xff08;Z0&#xff09;到图像平面的投影关系为&#xff1a; s [ u v 1 ] K [ r 1 r 2 t ] [ X Y 1 ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} K…