题目:两数相加 (难度:中等)

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。

将两数相加返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例:

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

输出:7 -> 0 -> 8

原因:342 + 465 = 807

思路:

本题的思路很简单,按照小学数学中学习的加法原理从末尾到首位,对每一位对齐相加即可。

技巧在于如何处理不同长度的数字,以及进位和最高位的判断。将两个单链表表示的数字相加,再将结果用单链表表示出来。

主要考察对链表的操作,对链表这种数据结构的遍历、增、删等操作应该熟练。

答案:

class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if not l1:
return l2
if not l2:
return l1 val1, val2 = [l1.val], [l2.val] while l1.next:
val1.append(l1.next.val)
l1 = l1.next while l2.next:
val2.append(l2.next.val)
l2 = l2.next # 如:str(0) = '2'
num1 = ''.join([str(i) for i in val1[::-1]]) #列表val1的[2,4,3]反向并str格式化为字符串形式:'342'
# print(num1 == '342')
num2 = ''.join([str(i) for i in val2[::-1]]) #列表val2的[5,6,4]反向并格式化为字符串形式:'465' tmp = str(int(num1) + int(num2))[::-1] # 807格式化为字符串并反向,得到字符串tmp = '708'
res = ListNode(int(tmp[0])) # 如:res此时包括以后都是链表表头-head,指向第一个节点。res = ListNode(7)
run_res = res # run_res刚开始是指向第一个节点 # run_res.val = 7
for i in range(1, len(tmp)):
run_res.next = ListNode(int(tmp[i]))
run_res = run_res.next
# print(res.val, res.next.val, res.next.next.val) 输出7 0 8
return res # 测试
if __name__ == '__main__':
# 创建对象Solution
sol = Solution()
# 定义l1链表
l1 = ListNode('2')
l1.next = ListNode(4)
l1.next.next = ListNode(3)
# 定义l2链表
l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next =ListNode(4)
# 获取返回值的链表
res = sol.addTwoNumbers(l1, l2)
print(res.val, res.next.val, res.next.next.val)

输出:

7 0 8
[Finished in 0.2s]

其他思路

  • 链表对应结点相加时增加前一个结点的进位,并保存下一个结点的进位;
  • 两个链表长度不一致时,要处理较长链表剩余的高位和进位计算的值;
  • 如果最高位计算时还产生进位,则还需要添加一个额外结点。

leetcode刷题2:两数相加add_two_numbers的更多相关文章

  1. LeetCode随缘刷题之两数相加

    逐步解释,有说错的地方欢迎指正. package leetcode.day_12_03; /** * 给你两个非空 的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存 ...

  2. LeetCode刷题 - (01)两数之和

    题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  3. 【LeetCode刷题】——两数之和.1

    ---恢复内容开始--- 一直想在leetcode上面刷题,但是java刚刚摸了一下门,所以迟迟没有动手,今天做了第一道题,感觉自己实在菜的不行,但是还是学到了很多东西, 就记录一下遇到的问题. 首先 ...

  4. letcode刷题之两数相加

    letcode里面刷题,坑还是链表不熟,(1)头结点还是有必要设置,否则返回的时候找不到位置:(2)先设置next到新节点再next到下一个节点:都是基础知识 /* * * You are given ...

  5. LeeCode第一次刷题(两数相加)

    题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  6. leetcode刷题1:两数之和two_sum

    题目:(难度:Easy) 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, ...

  7. 【LeetCode题解】2_两数相加

    目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...

  8. Leetcode(2)两数相加

    Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...

  9. 【leetcode】 算法题2 两数相加

      问题      给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...

随机推荐

  1. 26计算限制的异步操作02-CLR

    由CLR via C#(第三版) ,摘抄记录... 6 Parallel的静态For,ForEach和Invoke方法 在一些常见的编程情形中,使用任务也许会提升性能.为了简化编程,静态类System ...

  2. JNI动态库生成、编译、查看相关简易资料

    有一篇好博文,大家可以看下http://www.cnblogs.com/zhangweia/archive/2010/09/16/1828176.html,我这里是参考其做的另外一个javah -cl ...

  3. 制作dos启动u盘

    需要准备的工具: 空U盘的U盘HP优盘启动盘格式化工具 链接:https://pan.baidu.com/s/1i59wgUp 密码:l5ke 1.1插入U盘,打开   HP优盘启动盘格式化工具 1. ...

  4. Android无线测试之—UiAutomator UiSelector API介绍之一

    一. UiSelector类介绍: 1) UiSelector类说明: UiSelector代表一种搜索条件,可以在当前界面上查询和获取特定元素的句柄,当找到多余一个的匹配元素,则返回布局层次结构上第 ...

  5. 洛谷P1122 最大子树和

    P1122 最大子树和 题目提供者该用户不存在 标签动态规划树形结构 难度普及/提高- 通过/提交54/100 提交该题 讨论 题解 记录 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在 ...

  6. Git使fork项目与源项目保持一致方法

    Github上经常干的一件事情是看到好的项目,总会fork到自己的项目列表里,但是源项目如果更新了,怎么同步到我们自己的fork项目呢? 操作如下: 先clone自己的fork项目到本地工程目录, g ...

  7. Django基础流程

    软件环境: Pycharm 2018.1 Python 3.6 Django 2.0.3 1.新建项目 直接使用Pycharm的菜单来创建项目,命名为mysite. mysite mysite __i ...

  8. 解决table插入tr错位

    table中用JavaScript插入隐藏(即display="none";)的tr时,别用display="block";换成display="&q ...

  9. SQL Server 2008 收缩日志 清空删除大日志文件

    SQL2008 的收缩日志 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消: (SQL2005) BackupLog DNName ...

  10. Arcgis server服务启动后停止

    ---恢复内容开始--- 重新按装server10.1,10sp1和10.2 易出现服务无法启动.在管理中手动启动服务,出现如图1所示的错误. 图1 错误信息 本人多次遇到用户反馈这问题,最初以为是因 ...