博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PigyChan_LeetCode 2. 两数相加
阅读量:3948 次
发布时间:2019-05-24

本文共 2911 字,大约阅读时间需要 9 分钟。

2. 两数相加

难度中等

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8
原因:342 + 465 = 807

(1)设置两根指针分别指向两链表头,以相同的速度向后遍历

(2)设置一个bool isCarry保存当前是否存在进位

思路1.0:

创建新链表作为结果链表,额外的空间成本

代码1.0:

将结果存在了新建的一个节点上

class Solution {
public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* cur1 = l1; ListNode* cur2 = l2; ListNode* ans = new ListNode(-1); ListNode* curAns = ans; bool isCarry = false; while (cur1 != NULL || cur2 != NULL) {
int val1; int val2; if (cur1 == NULL) {
val1 = 0; } else {
val1 = cur1->val; cur1 = cur1->next; } if (cur2 == NULL) {
val2 = 0; } else {
val2 = cur2->val; cur2 = cur2->next; } int total = val1 + val2 + isCarry; if (total >= 10) {
total -= 10; isCarry = true; } else {
isCarry = false; } ListNode* newNode = new ListNode(total); curAns->next = newNode; curAns = curAns->next; } if (isCarry) {
ListNode* newNode = new ListNode(1); curAns->next = newNode; } return ans->next; }};

在这里插入图片描述

思路2.0:

选择在原来的其中一条较长链表作为结果链表,以节省空间开销,但提升遍历开销。

代码2.0:

class Solution {
public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* cur1 = l1; ListNode* cur2 = l2; int len1 = 0; int len2 = 0; bool isCarry = false; while (cur1 != NULL) {
++len1; cur1 = cur1->next; } while (cur2 != NULL) {
++len2; cur2 = cur2->next; } cur1 = len1 >= len2 ? l1 : l2; cur2 = len1 >= len2 ? l2 : l1; ListNode* pre = cur1; while (cur2 != NULL) {
int total = cur1->val + cur2->val + isCarry; if (total >= 10) {
total -= 10; isCarry = true; } else isCarry = false; pre = cur1; cur1->val = total; cur1 = cur1->next; cur2 = cur2->next; } while (cur1 != NULL) {
if (cur1->val == 9 && isCarry) {
cur1->val = 0; isCarry = true; } else {
cur1->val += isCarry; isCarry = false; } pre = cur1; cur1 = cur1->next; } if (isCarry) {
ListNode* newNode = new ListNode(1); pre->next = newNode;; } return len1 >= len2 ? l1 : l2; }};

在这里插入图片描述

效率还是不理想。。

转载地址:http://rpowi.baihongyu.com/

你可能感兴趣的文章
Servlet学习笔记
查看>>
JSP相关介绍
查看>>
Session和Cookie
查看>>
数据库系统原理与设计复习笔记
查看>>
MVC设计模式
查看>>
GIT简要介绍
查看>>
人机交互期末复习笔记
查看>>
计算机网络复习笔记
查看>>
boost学习-1.安装
查看>>
boost学习-2.总体感受
查看>>
boost学习-3.conversion,多态类型之间的安全转型,与数据类型转换
查看>>
2010年十大移动互联网应用将火山爆发
查看>>
云计算介绍
查看>>
敏捷开发笔记1
查看>>
vs2008
查看>>
转:NoSQL数据库探讨之一 - 为什么要用非关系数据库?
查看>>
log4cplus的按日生成文件,配置例子
查看>>
跨平台的文字编码转换方法--ICU
查看>>
ICU4C 4.4 静态库的编译
查看>>
FTP下载类, windows平台下对CFtpConnection上传下载的封装类
查看>>