zoukankan      html  css  js  c++  java
  • 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 = None
    
    class 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.next
    
    if __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)
    

      

  • 相关阅读:
    Python基础实例001:数字组合问题
    Python集合
    标量、向量、矩阵、张量
    re模块函数之search
    Python常用字符串操作
    Python基础之元组
    Bai, IEEE 2019
    词嵌入
    RNN 训练时梯度爆炸和梯度消失的理解
    OCR 综述
  • 原文地址:https://www.cnblogs.com/xieweichong/p/4269200.html
Copyright © 2011-2022 走看看