码迷,mamicode.com
首页 > 其他好文 > 详细

#2 Add Two Numbers

时间:2015-06-30 18:06:51      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

一、题目

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

 

二、解析

本题是大数加法,用Python不用考虑数据类型的问题。另外题中的逆序也并不产生什么影响,输入逆序,输出也是逆序,直接从0开始即可。

 

三、实现思路

1.建立一个链表,作为最终输出结果

2.取出L1,L2相同位置的数,与进位一起加和得tempSum。%作为本位值thisValue,/作为下一位的进位nextExtra

3.若加和过程中L1或者L2为None,则说明这个链表已到头,加和时用0做替补。

 

四、难点

1.while循环的退出条件需要整体考虑后才能确定是三项:L1,L2和nextExtra

2.Python链表操作

 

五、Python代码

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     # @param {ListNode} l1
 9     # @param {ListNode} l2
10     # @return {ListNode}
11     def addTwoNumbers(self, l1, l2):
12         LinkList = p = ListNode(0)
13         nextExtra = 0
14         
15         while l1 or l2 or nextExtra:
16             if l1:
17                 temp1 = l1.val
18             else:
19                 temp1 = 0
20             
21             if l2:
22                 temp2 = l2.val
23             else:
24                 temp2 = 0
25             
26             tempSum = temp1 + temp2 + nextExtra
27             thisValue = tempSum % 10
28             nextExtra = tempSum / 10
29             
30             p.next = ListNode(thisValue)
31             p = p.next
32             if l1:
33                 l1 = l1.next
34             if l2:
35                 l2 = l2.next
36         
37         return LinkList.next

 

六、总结

1.在本题中,了解了Python中链表的方法。用class来定义一个数据类型,与C语言相比更好用,另外代码中的l1,l2都是指针,不带*使代码看起来十分简洁。

2.链表连续声明LinkList = p = ListNode(),这里p,LinkList都是表示一个链表,只是这里p用于执行向后移位添加元素,LinkList一直指向链表的开始。还是指针的用法,但就是感觉好好用。

3.之前用C语言实现过大数相加,要将int转换成str。一见这题第一反应是要转换成str,被误导了一会儿,看了别人的代码后才回过神来。

4.效率不高,执行了202ms,排在中间,和同学讨论一下哪里可以优化。

5.有的时候那些最快的算法往往都是根据本题具体要求设计的“取巧”算法,这方面还需要锻炼,具体问题具体分析,得出最优结果,应该还有很长的路要走。

6.没有了,加油!

 

#2 Add Two Numbers

标签:

原文地址:http://www.cnblogs.com/breada/p/4610884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!