steam 相同元素相加_LeetCode 2. 两数相加
![](/assets/blank.gif)
leetcode 2. 两数相加
题目描述
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
题解
备注:没有进行输入检查,默认是有效输入数据.
按位依次累加
首先观察数字和链表的对应方式:342--(2->4->3)
,在链表中,最低位是头节点,那么明显的,我们可以将两个链表按照顺序累加,同时需要注意会产生进位.
考虑到进位:
- 获取链表上相同位数的元素并相加得到
x
- 如果之前上一个有进位标志,则
x++
,设置进位标志为false
- 判断
x>=10
,如果大于等于10,则需要x-=10
,并且将进位标志重新设置成true
. - 创建节点等
- 在所有的值都处理完成后,如果进位标志是
true
,说明需要单独进位,如99+1 = 100
.
链表相加:
- 两个链表从头开始,设置
p1
和p2
来依次遍历 - 当
p1
和p2
都不为nullptr
时,可以同时遍历两个链表:p1 != nullptr && p2 != nullptr
- 如果
p1
和p2
有一个走到了链表终点,即指向了nullptr
,那么我们只需要遍历另外一个链表的剩余元素(需要考虑进位信息)
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {bool isOut = false; // 进位标志ListNode *p1 = l1;ListNode *p2 = l2;ListNode *head = new ListNode(0); // 临时的头节点,用来悬挂后续节点ListNode *cur = head; // 当前节点while (p1 != nullptr && p2 != nullptr) {int x = p1->val + p2->val; // 计算和if (isOut) // 如果上一个有进位,则x++,取消进位标志{x++;isOut = false;}if (x >= 10) // 判断当前值是否溢出{x -= 10; // 溢出则-10,并且设置进位标志isOut = true;}ListNode *tmp = new ListNode(x); // 构建节点cur->next = tmp; // 悬挂在当前节点后面cur = tmp; // 重设当前节点p1 = p1->next;p2 = p2->next;}// 获取到没有遍历完的listListNode *s = nullptr;if (p1 != nullptr) s = p1;if (p2 != nullptr) s = p2;while (s != nullptr) {int x = s->val; // 获取值if (isOut) // 还需要结合进位标志判断{x++;isOut = false;}if (x >= 10) {x -= 10;isOut = true;}ListNode *tmp = new ListNode(x);cur->next = tmp;cur = tmp;s = s->next;}if (isOut) // 最后判断进位标志,如果还有,说明得单独创建一个节点{ListNode *tmp = new ListNode(1);cur->next = tmp;}ListNode *r = head->next;delete head;return r;}
};
执行用时:32 ms, 在所有 C++ 提交中击败了81.51%的用户
内存消耗:9.1 MB, 在所有 C++ 提交中击败了75.31%的用户
常见错误
- 将链表转换为数字,然后数字相加,最后将数字转为链表.在第一步转换数字的时候,链表可以存储超大数,但是数字类型
long long
等不一定能够存放下. - 忘记考虑最后的一个进位标志.
steam 相同元素相加_LeetCode 2. 两数相加相关推荐
- python两数相加取_Leetcode_两数相加_Python
小编从今天起要开始分享一些Leedcode代码,通过好好练习编程能力,争取以后找一份好工作. 题目:两数相加 # Definition for singly-linked list. # class ...
- python两个数相加时_两数相加 leetcode Python
给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -& ...
- mysql 两个数相加_LeetCode 01两数之和02两数相加
LeetCode01两数之和 题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案 ...
- 用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)
两种解法,第一种是在原有的两个链表中选择更长的那个作为结果返回,虽然节约了空间,但是增加了时间复杂度,而且没有用到如何设置链表的增加与删除,第二种看起来清爽很多,逻辑也清晰. ### 题目 给出两个非 ...
- python两数相加取_两数相加(Python3)
提出问题: 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的 ...
- 两数相加c++_LeetCode 热题 HOT 100(01,两数相加)
LeetCode 热题 HOT 100(01,两数相加) 不够优秀,发量尚多,千锤百炼,方可成佛. 算法的重要性不言而喻,无论你是研究者,还是最近比较火热的IT 打工人,都理应需要一定的算法能力,这也 ...
- -9 逆序输出一个整数的各位数字_leetcode两数相加(大整数相加)
题目来源于leetcode第二题两数相加. 题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相 ...
- leetCode刷题 2. 两数相加
原题链接: leetcode-cn.com/problems/ad- 题目描述 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你 ...
- 【前端来刷LeetCode】两数之和与两数相加
大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...
- 两数之和,两数相加(leetcode)
我们都知道算法是程序员成长重要的一环,怎么才能提高算法呢, 出来在网上看视频之外,动手练习是非常重要的.leetcode 就是一个非常好的锻炼平台. 1. 两数之和,在 leetcode 里面是属于 ...
最新文章
- 线性代数不深入,机器学习两行泪!
- cups支持的打印机列表_网络存储让你的打印机瞬间变无线,打印文件不用愁
- Android 违规使用 Java,谷歌或面临 88 亿美元赔款
- JQuery EasyUI DataGrid
- php 字符串hash比较,分析两个 url 查询字符串和 hash 的区别
- RHEL7及CentOS7的语言、字符编码、键盘映射、X11布局设置(localectl)-系统管理(1)...
- 水很深的深度学习-Task02机器学习基础
- if condition 大于_西门子进一步扩展Sinumerik Edge 平台的应用程序AnalyzeMyMachine/Condition...
- 粗略写了使用GD2制作文字图像demo
- 拓端tecdat|SAS中用单因素ANOVA研究不同疗法对焦虑症的有效性
- (转)好的投资应当是:善良为先,智慧为道,奋斗为本
- 【Java架构师入门到精通】java分布式架构有哪些技术
- 算法帝国:华尔街交易怪兽的核武器缔造史
- 市场营销渠道含义是什么?
- 图书馆管理系统(一)
- 【共识专栏】共识的分类(上)
- Windows IDEA 字体美化
- Kibana:在 Kibana 中使用 Maps 和 Timelion 分析地震数据
- 股票历史数据-股票历史数据查询怎么查?怎么查股票历史数据?
- 0-1背包问题小总结(hdu 2062)