首页 > 代码库 > Add Two Numbers
Add Two Numbers
title:
#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# methon one:array merge sum O(n+m)# class Solution:# def addTwoNumbers(self, l1, l2):# l3 = list()# if len(l1) <= len(l2):# min_len = len(l1)# max_len = len(l2)# else:# min_len = len(l2)# max_len = len(l1)# l3 = [0 for i in range(max_len+1)]# index = int()# for i in range(min_len):# if (l1[i] + l2[i] + l3[i] <= 9):# l3[i] = l1[i] + l2[i] + l3[i]# else:# l3[i] = l1[i] + l2[i] + l3[i] - 10# l3[i+1] = l3[i+1] + 1# index = i + 1# if index < len(l1):# for i in range(index,len(l1)):# if(l3[i] + l1[i] + l3[i] <= 9):# l3[i] = l1[i] + l3[i]# else:# l3[i] = l1[i] + l3[i] - 10# l3[i+1] = l3[i+1] + 1# else:# for i in range(index,len(l2)):# if(l3[i] + l2[i] + l3[i] <= 9):# l3[i] = l2[i] + l3[i]# else:# l3[i] = l2[i] + l3[i] - 10# l3[i+1] = l3[i+1] + 1# if (l3[len(l3)-1] == 0):# l3.pop()# return l3# methon two:singel link merge sum O(n+m)# Definition for singly-linked list.class ListNode: def __init__(self, x): self.val = x self.next = Noneclass Solution: # @return a ListNode def addTwoNumbers(self, l1, l2): #head node dummy = ListNode(-1) first = l1 second = l2 prev = dummy tail = dummy #if beyond 10,carry = 1 carry = 0 while(first != None and second != None): if (first.val + second.val + carry <= 9): tail = ListNode(first.val + second.val + carry) carry = 0 print tail.val else: tail = ListNode(first.val + second.val - 10 + carry) carry = 1 print tail.val #tail insert prev.next = tail prev = tail first = first.next second = second.next #process remain node if first != None: while(first != None): if (first.val + carry <= 9): tail = ListNode(first.val + carry) carry = 0 print tail.val else: tail = ListNode(first.val - 10 + carry) carry = 1 print tail.val prev.next = tail prev = tail first = first.next if carry == 1: tail = ListNode(1) carry = 1 print tail.val prev.next = tail prev = tail else: while(second != None): if (second.val + carry <= 9): tail = ListNode(second.val + carry) carry = 0 print tail.val else: tail = ListNode(second.val - 10 + carry) carry = 1 print tail.val prev.next = tail prev = tail second = second.next if carry == 1: tail = ListNode(1) carry = 1 print tail.val prev.next = tail prev = tail #return head.next node return dummy.nextif __name__ == ‘__main__‘: s = Solution() a = ListNode(2) b = ListNode(4) c = ListNode(3) l1 = a a.next = b b.next = c # d = ListNode(5) # e = ListNode(6) # f = ListNode(4) # l2 = d # d.next = e # e.next = f d = ListNode(9) e = ListNode(7) f = ListNode(6) g = ListNode(9) h = ListNode(9) i = ListNode(3) l2 = d d.next = e e.next = f f.next = g g.next = h h.next = i print s.addTwoNumbers(l1,l2)
Add Two Numbers
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。