leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等)
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。
将两数相加返回一个新的链表。
你可以假设除了数字 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的更多相关文章
- LeetCode随缘刷题之两数相加
逐步解释,有说错的地方欢迎指正. package leetcode.day_12_03; /** * 给你两个非空 的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存 ...
- LeetCode刷题 - (01)两数之和
题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...
- 【LeetCode刷题】——两数之和.1
---恢复内容开始--- 一直想在leetcode上面刷题,但是java刚刚摸了一下门,所以迟迟没有动手,今天做了第一道题,感觉自己实在菜的不行,但是还是学到了很多东西, 就记录一下遇到的问题. 首先 ...
- letcode刷题之两数相加
letcode里面刷题,坑还是链表不熟,(1)头结点还是有必要设置,否则返回的时候找不到位置:(2)先设置next到新节点再next到下一个节点:都是基础知识 /* * * You are given ...
- LeeCode第一次刷题(两数相加)
题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...
- leetcode刷题1:两数之和two_sum
题目:(难度:Easy) 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, ...
- 【LeetCode题解】2_两数相加
目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...
- Leetcode(2)两数相加
Leetcode(2)两数相加 [题目表述]: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两 ...
- 【leetcode】 算法题2 两数相加
问题 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...
随机推荐
- SlidingMenu——使用前的配置
一: 首先下载lib:SlidingMenu.然后将起导入eclipse中,然后将其clean一下,重新生成R文件. 二: 因为SlidingMenu依赖ActionBarSherlock,所以需要下 ...
- ios [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错
今天接口由get换成post,我去改进行登录但出现了这个错误,首先出错先看能不能与服务器交互,能不能获得数据,其次,获得的数据是不是你想要的,记住,首先出错要想到是自己的问题,还有就是程序崩了要学会自 ...
- es6 async与await实战
在使用js的时候,我们经常会遇到一个问题,就是我们需要等待请求返回再做下一步处理,之前的处理方式是通过ajax的success或者callback之类的方法,不过一层一层真的恶心,而且只是针对单个页面 ...
- SAP FI 中4个特殊期间
标准SAP ERP里面有个13-16的4个特殊的会计期间,这4个特殊的会计期间如何使用?作用是什么? SAP记帐期间变式,会计年度与特殊期间. 记帐期间变式是较难理解的一个内容.不过要表达的内容很简单 ...
- Mongo同步数据到Elasticsearch
个人博客:https://blog.sharedata.info/ 最近需要把数据从Mongo同步到Elasticsearch环境:centos6.5python2.7pipmongo-connect ...
- 洛谷P1122 最大子树和
P1122 最大子树和 题目提供者该用户不存在 标签动态规划树形结构 难度普及/提高- 通过/提交54/100 提交该题 讨论 题解 记录 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在 ...
- Git使fork项目与源项目保持一致方法
Github上经常干的一件事情是看到好的项目,总会fork到自己的项目列表里,但是源项目如果更新了,怎么同步到我们自己的fork项目呢? 操作如下: 先clone自己的fork项目到本地工程目录, g ...
- set集合可以添加重复元素
set集合判断元素的唯一性要重写hashcode和equals方法,这样就能保证不会加入重复的元素, 但是在以下这种情况下任然可以加入重复元素,即使他们的hashcode和equals方法结果相同 p ...
- 使用QtConcurrent编写多线程程序(也可以阻塞)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/66470751Qt在其QtConcurrent命名空 ...
- vertical-align:middle;一般用于img和行内文字对齐方式
vertical-align:top ;文字和行内块元素的顶部对齐 vertical-align:middle;居中 vertical-align:bottom;底对齐