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

leetcode hot100刷题日记——30.两数之和

在这里插入图片描述
在这里插入图片描述
解答:
方法一:迭代

迭代大致过程就是:
算两条链表的当前位的和,加上上一位留下来的进位,就是新链表的当前位的数字。计算当前的进位。

这样,我们迭代需要的东西是:链表1,链表2,进位。故有addTwoNumbers(ListNode* l1, ListNode* l2,int carry=0)

迭代结束条件分析:链表1到空,链表2到空,进位是0

/*** 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,int carry=0) {//递归法,carry代表要进的位if(l1==nullptr&&l2==nullptr&&carry==0){return nullptr;}int s=carry;//记录当前数位的数字if(l1){s+=l1->val;l1=l1->next;}if(l2){s+=l2->val;l2=l2->next;}return new ListNode(s%10,addTwoNumbers(l1,l2,s/10));}
};

n,m代表两条链表的长度
时间复杂度:O(max(n,m))
空间复杂度:O(max(n,m))

方法二:迭代
哨兵节点是不是日记29link也见过!

这里注意初始化新的节点写法new ListNode();还要注意创建了哨兵节点以后,需要ListNode* cur=&dummy;来指向哨兵节点,再继续添加新节点哦!

返回的时候要返回dummy->next哦!因为dummy本身是空的。

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode dummy;ListNode* cur=&dummy;int carry=0;//进位while(l1||l2||carry){//如果链表没有都遍历到最后,或者进位不是0,就一直迭代下去if(l1){carry+=l1->val;l1=l1->next;}if(l2){carry+=l2->val;l2=l2->next;}cur=cur->next=new ListNode(carry%10);carry/=10;}return dummy.next;}
};

时间复杂度:O(max(n,m))
空间复杂度:O(1)

空间复杂度详解

递归法:

递归调用深度:每次递归处理两个链表的一个节点,直到两个链表均遍历完成且无进位。递归深度等于较长链表的长度(假设为L)加上可能的额外一位进位。
例如:
输入链表长度分别为m和n,则递归深度为max(m, n) + 1。

最坏情况下(如两个相同长度的链表全为9且相加后连续进位),递归深度等于链表长度。
栈空间开销:每次递归调用需在栈中保存局部变量(l1、l2、s等)及返回地址。总栈空间需求与递归深度成正比。

结果链表空间:虽然递归过程中创建了结果链表节点,但通常将输出结果视为算法的必要输出,不计入"额外空间"复杂度(但若需统计所有空间,则应考虑结果链表占用的O(L)空间)。

最终空间复杂度:O(max(m, n)),其中m和n分别为输入链表的长度。这是由于递归调用栈的最大深度与链表长度成线性关系。

空间复杂度的定义:
空间复杂度(Space Complexity)是指算法在运行过程中临时占用的内存空间的大小。
它包括所有局部变量、参数以及递归调用栈所占用的空间。
在递归算法中,由于每次递归调用都会创建新的栈帧,因此递归深度是影响空间复杂度的关键因素。

迭代法

所以在迭代法中,新建立的链表的节点是结果的一部分,不是临时占用的内存空间,不计入空间复杂度,只有常量级别的额外空间。

http://www.xdnf.cn/news/10324.html

相关文章:

  • 那些常用的运维工具
  • LeetCode 1524. 和为奇数的子数组数目
  • 【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
  • Flask-Login使用示例
  • R语言错误处理方法大全
  • Python 从入门到精通视频下载
  • Nacos实战——动态 IP 黑名单过滤
  • 【LLM】FastAPI入门教程
  • 无公网ip远程桌面连接不了怎么办?内网计算机让外网访问方法和问题分析
  • 2. 手写数字预测 gui版
  • VMvare 创建虚拟机 安装CentOS7,配置静态IP地址
  • Kubernetes架构与核心概念深度解析:Pod、Service与RBAC的奥秘
  • 算法训练第四天
  • 企业上线ESOP(电子标准操作程序)电子作业指导书,实现车间无纸化,是数字化转型的重要一步
  • ZC-OFDM雷达通信一体化减小PAPR——部分传输序列法(PTS)
  • 利用python工具you-get下载网页的视频文件
  • 学习笔记:3个学习AI路上反复看到的概念:RAG,Langchain,Agent
  • MySql(十)
  • 字符串~~~
  • 【Python训练营打卡】day40 @浙大疏锦行
  • 前端学习(7)—— HTML + CSS实现博客系统页面
  • python魔法函数
  • 《操作系统真相还原》——初探保护模式
  • 使用curlconverter网站快速生成requests请求包
  • 【Docker 新手入门指南】第十五章:常见故障排除
  • pytest 常见问题解答 (FAQ)
  • 头歌java课程实验(学习-Java字符串之正则表达式之元字符之判断字符串是否符合规则)
  • 每日c/c++题 备战蓝桥杯(P1204 [USACO1.2] 挤牛奶 Milking Cows)
  • [蓝桥杯]分考场
  • 【11408学习记录】考研英语写作提分秘籍:2013真题邀请信精讲+万能模板套用技巧