zoukankan      html  css  js  c++  java
  • leetcode 002

    2. Add Two numbers

    Difficulty:Medium

    The Link

    Description

    You are given two non-empty linked lists representing two non-negative intergers. 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.
    
    Example:
    
    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8
    Explanation: 342 + 465 = 807.
    

    Solutions:

    Solution A:

    Brute-force attack (暴力破解)
    runtime: Time limit exceeded

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            if not l1:
                return l2
            if not l2:
                return l3
            val1, val2 = [l1.val],[l2.val]
            print (val1,val2)
            while l1.next:
                val1.append(l1.next.val)
            while l2.next:
                val2.append(l2.next.val)
            # [::-1] 从后往前遍历
            num1 = ''.join([str(i) for i in val1[::-1]])
            num2 = ''.join([str(i) for i in val2[::-1]])
    
            tmp = str(int(num1)+ int(num2))[::-1]
            res = ListNode(int(tmp[0]))
            run_res = res
            for i in range(1,len(tmp)):
                run_res.next = ListNode(int(tmp[i]))
                run_res = run_res.next
            return run_res
    

    Solution B:

    Recursion: runtime:32ms

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            if not l1:
                return l2
            if not l2:
                return l1
            if l1.val + l2.val < 10:
                l3 = ListNode(l1.val+l2.val)
                l3.next =self. addTwoNumbers(l1.next,l2.next)
            else:
                l3 = ListNode(l1.val+ l2.val - 10 )
                tmp = ListNode(1)
                tmp.next = None
                l3.next =self. addTwoNumbers(l1.next,self.addTwoNumbers(l2.next,tmp))
           return l3
    
    
  • 相关阅读:
    python之isinstance和issubclass
    python中类的继承
    python中面向对象
    python中常用的内置模块
    Python常用模块
    python中的常用内置模块
    python中的包、模块及导入
    python中的内置函数(二)
    国内7大核心期刊
    PS学习列表
  • 原文地址:https://www.cnblogs.com/Mr0wang/p/9719883.html
Copyright © 2011-2022 走看看