【力扣】2.两数相加

devtools/2025/1/23 16:03:17/

题目

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

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

你可以假设除了数字 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
  • 题目数据保证列表表示的数字不含前导零

我的解答

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {vector<int> vec1,vec2;vector<int> res;while(l1!=nullptr){vec1.push_back(l1->val);l1=l1->next;}while(l2!=nullptr){vec2.push_back(l2->val);l2=l2->next;}int i=0;int j=0;int t=0;while(i<vec1.size() && j<vec2.size()){int tmp = vec1[i]+vec2[j]+t;res.push_back(tmp%10);t=tmp/10;i++;j++;}while(i<vec1.size()){if(t>0){int tmp = vec1[i]+t;res.push_back(tmp%10);t=tmp/10;}else{res.push_back(vec1[i]);}i++;}while(j<vec2.size()){if(t>0){int tmp = vec2[j]+t;res.push_back(tmp%10);t=tmp/10;}else{res.push_back(vec2[j]);}j++;}if(t>0){res.push_back(t);}ListNode* L = new ListNode(res[0]);ListNode* p=L;for(int k=1;k<res.size();k++){ListNode* node = new ListNode(res[k]);p->next=node;p=node;}return L;}
};

优化方案

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* L=nullptr;ListNode* p=L;int t=0;while(l1 || l2){int n1=l1?l1->val:0;int n2=l2?l2->val:0;int sum = n1+n2+t;if(!L){L=p=new ListNode(sum%10);}else{p->next=new ListNode(sum%10);p=p->next;}t=sum/10;if(l1){l1=l1->next;}if(l2){l2=l2->next;}}if(t>0){ListNode* node = new ListNode(t);p->next=node;            }return L;}
};

我个人感觉官方题解和我的思路差不多吧,主要的优化是直接在链表的基础上直接加和进位,但是我先把数字整理成了vector数组,挺多此一举的。只要保证如果链表为空,添0即可。


http://www.ppmy.cn/devtools/152925.html

相关文章

回归算法、聚类算法、决策树、随机森林、神经网络

这也太全了&#xff01;回归算法、聚类算法、决策树、随机森林、神经网络、贝叶斯算法、支持向量机等十大机器学习算法一口气学完&#xff01;_哔哩哔哩_bilibili 【线性回归、代价函数、损失函数】动画讲解_哔哩哔哩_bilibili 14分钟详解所有机器学习算法&#xff1a;…

基于单片机的智能家居控制系统设计及应用

摘要 : 智能家居控制系统包括对家电实现远距离控制和近距离控制的一种控制型系统,通过系统内的 TC35 模块对控制信息进行采集,并将这些控制信息发送到 STC89C52 模块中去,由单片机发出系统控制指令,从而实现家居家电的控制。 关键词 :单片机 ; 智能家居 ; 家居生活 ; 控…

第3天:阿里巴巴微服务解决方案概览

一、阿里巴巴微服务解决方案概述 阿里巴巴在微服务领域贡献了多个开源项目&#xff0c;形成了完整的微服务解决方案&#xff0c;广泛应用于分布式系统开发。其中&#xff0c;Spring Cloud Alibaba 是基于 Spring Cloud 构建的一站式微服务解决方案&#xff0c;集成了多个阿里巴…

BUUCTF_Web(October 2019 Twice SQL injection)

October 2019 Twice SQL injection 知识点&#xff1a; 二次注入&#xff1a; 当用户提交的恶意数据被存入数据库后&#xff0c;应用程序再把它读取出来用于生成新的SQL语句时&#xff0c;如果没有相应的安全措施&#xff0c;是有可能发生SQL注入的&#xff0c;这种注入就叫…

计算机网络 (55)流失存储音频/视频

一、定义与特点 定义&#xff1a;流式存储音频/视频是指经过压缩并存储在服务器上的多媒体文件&#xff0c;客户端可以通过互联网边下载边播放这些文件&#xff0c;也称为音频/视频点播。 特点&#xff1a; 边下载边播放&#xff1a;用户无需等待整个文件下载完成即可开始播放…

过年远控家里电脑打游戏,哪款远控软件最好用?

马上过年了&#xff0c;像小编这样的“网瘾少年”实在是放不下每天都在玩的PC游戏&#xff0c;但过年回家又不太可能背着高性能的PC&#xff08;因为重&#xff09;&#xff0c;那么不如试试远程控制家里的电脑玩游戏。 现在市面上有不少远程控制软件&#xff0c;这些软件哪些…

BH1750使用程序

#include "delay.h" #include "GY30/BH1750FVI.h" typedef unsigned char BYTE; //BYTE BUF[8]; //接收数据缓存区 //iic接口初始化 /** ** 设置SDA为输出 **/ void BH1750_SDA_OUT(void) { GPIO_InitTypeDef GPIO_…

EXCEL的一些用法记录

按某个分隔符进行拆分多列 【数据】- 【分列】 多列调整成多行 复制 - 粘贴 - 选择【转置】 部分内容替换 SUBSTITUTE()函数 &#xff0c;固定内容 加“”