leetcode(2)Add Two Numbers
来源:互联网 发布:合肥市行知学校前身 编辑:程序博客网 时间:2024/06/13 09:34
Problem
You are given two non-empty linked lists representing two non-negative integers. 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.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
这种问题思路上比较简单,不需要考虑如何进行优化,考察点就是代码能力,要做的就是优雅地写出代码。
my solution
就是按照正常竖式手算加法计算两个数中的最短长度,当两个数位数不一样时,在使用多位数加个位数方法。
class Solution(object): #多位数加个位数 def addListAndNum(self, l, flag): tmp = l while l != None: if l.val + flag >= 10: l.val = l.val + flag - 10 flag = 1 else: l.val = l.val + flag flag = 0 return tmp pre = l l = l.next if flag == 1: pre.next = ListNode(1) return tmp def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ tmp = l1 flag = 0 while l1 != None and l2 != None: if l1.val + l2.val + flag >= 10: #要注意使用变量与赋值的顺序 l1.val = l1.val + l2.val + flag - 10 flag = 1 else: l1.val = l1.val + l2.val + flag flag = 0 p1 = l1 p2 = l2 l1 = l1.next l2 = l2.next if l1 == None and l2 == None: if flag == 1: p1.next = ListNode(1) elif l1 == None: p1.next = self.addListAndNum(l2, flag) else: p1.next = self.addListAndNum(l1, flag) return tmp
时间复杂度:
空间复杂度:
leetcode solution
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p != null || q != null) { int x = (p != null) ? p.val : 0; int y = (q != null) ? q.val : 0; int sum = carry + x + y; carry = sum / 10; curr.next = new ListNode(sum % 10); curr = curr.next; if (p != null) p = p.next; if (q != null) q = q.next; } if (carry > 0) { curr.next = new ListNode(carry); } return dummyHead.next;}
对应的python代码:
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ ans = ListNode(0) tmp = ans flag = 0 while l1 != None or l2 != None: if l1 != None: val1 = l1.val else: val1 = 0 if l2 != None: val2 = l2.val else: val2 = 0 if val1 + val2 + flag >= 10: ans.val = val1 + val2 + flag - 10 flag = 1 else: ans.val = val1 + val2 + flag flag = 0 if l1 == None: pass else: l1 = l1.next if l2 == None: pass else: l2 = l2.next ans.next = ListNode(0) p = ans ans = ans.next if flag == 1: ans.val = 1 else: p.next = None return tmp
时间复杂度:
空间复杂度:
总结
leetcode官方给出的算法的缺点就是空间复杂度还有改进的空间,也可以减小为O(1)的,在我的解法里可以仿照答案,通过一些条件判断把高位空位看做0,可以不使用长整数加个位数的算法。
阅读全文
0 0
- LeetCode 2 - Add Two Numbers
- LeetCode 2: Add Two Numbers
- Leetcode: Add Two Numbers (2)
- [leetcode 2] Add Two Numbers
- [Leetcode] 2 - Add Two Numbers
- LeetCode 2:《Add Two Numbers》
- LeetCode | #2 Add Two Numbers
- LeetCode 2 Add Two Numbers
- [Leetcode]2Add Two Numbers
- leetcode #2 Add Two Numbers
- leetcode-2 Add Two Numbers
- LeetCode 2 Add Two Numbers
- [leetcode] #2 Add Two Numbers
- LeetCode-2 Add Two Numbers
- LeetCode-2-Add Two Numbers
- Leetcode[2] Add Two Numbers
- LeetCode 2 Add Two Numbers
- LeetCode 2 Add Two Numbers
- 第六章 创建一个基于Table的简单App(二)
- C++ 指针
- 前端之路的自我修养
- HDU 1069 Monkey and Banana (dp)
- C Primer Plus(第6版)第七章答案
- leetcode(2)Add Two Numbers
- gcc编译注意事项
- Android Service解析
- 六、注解方式实现关联查询
- 第六章 创建一个基于Table的简单App(三)
- hdu 1080 Human Gene Functions
- php递归实现树状分类结构
- protobuf3在php中的使用
- 【Zookeeper】1.什么是Zookeeper