leetcode笔记--Add Two Numbers
2016-02-19 18:46
387 查看
题目:难度(Medium)
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
Tags:Linked List Math
Similar Problems:(M) Multiply Strings (E) Add Binary
分析:数字的各个位数被反向存储在链表里,例如342存储在链表里即为2->4->3,利用这种存储结构实现两个数相加。
可以将短链表里的数据元素依次加到长链表的对应元素中,在相加的过程中可能向高位产生进位,当短链表遍历完以后还需继续观察长链表,是否由于加上前一位的进位而导致继续向后进位,当长链表也遍历完以后,如果仍然有进位,则还需为长链表添加一个节点存储这个进位作为结果数据的最高位。
代码实现:
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
Tags:Linked List Math
Similar Problems:(M) Multiply Strings (E) Add Binary
分析:数字的各个位数被反向存储在链表里,例如342存储在链表里即为2->4->3,利用这种存储结构实现两个数相加。
可以将短链表里的数据元素依次加到长链表的对应元素中,在相加的过程中可能向高位产生进位,当短链表遍历完以后还需继续观察长链表,是否由于加上前一位的进位而导致继续向后进位,当长链表也遍历完以后,如果仍然有进位,则还需为长链表添加一个节点存储这个进位作为结果数据的最高位。
代码实现:
# Definition for singly-linked list. # 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 """ #利用原链表的节点组成新的链表,因为题目没有要求不改变原链表 #cur指向长一些的链表,长一些的链表总是作为组成新链表的基础,q总指向短链表 len1 = self.getLenOfSinglyLinkedList(l1) len2 = self.getLenOfSinglyLinkedList(l2) if len1 >= len2: head = l1 cur = l1 q = l2 else: head = l2 cur = l2 q = l1 flag = 0 r = head while q is not None: sumTmp = cur.val + q.val + flag if sumTmp > 9: cur.val = sumTmp%10 flag = 1 else: cur.val = sumTmp flag = 0 r = cur cur = cur.next q = q.next #短链表遍历完,还需继续观察长链表 while cur is not None: sumTmp = cur.val + flag if sumTmp > 9: cur.val = sumTmp%10 flag = 1 else: cur.val = sumTmp flag = 0 #此时不必再观察后面的元素,因为再也没有产生进位了,可以照搬长链表后面的元素了 break r = cur cur = cur.next #长链表的最后一个节点参与计算后仍然产生了一个进位,此时就需要自行创建一个新节点 if flag == 1: cur = ListNode(1) r.next = cur return head def getLenOfSinglyLinkedList(self, head): p = head len = 0 while p: p = p.next len+=1 return len
相关文章推荐
- install grub-customizer in ubuntu14.04
- 程序出错后 程序员给测试人员的20条高频回复
- ThinkPHP - 自定义标签库 - 标签驱动
- golang走起(三)list简单使用和interface{}
- CDZSC_2016寒假个人赛(2)-G(模拟)
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
- 弹幕调试 jquery.danmu.js
- BZOJ-2326 数学作业 矩阵乘法快速幂+快速乘
- Cocos2d-x lua游戏开发之安装Lua到mac系统
- 【记录用】码农之路所遇到的问题
- ZOJ-2969-Easy Task【5th浙江省赛】
- Mac 下安装python
- 做竞品分析时,几个容易犯的错误
- [leetcode] 54. Spiral Matrix
- SpringMVC_入门项目
- activiti5网关
- 使用 VS2005 编译 directshow sample 时链接错误
- 观察者模式总结
- 动态规划之 minimum path sum
- 笨小熊