zoukankan      html  css  js  c++  java
  • 2. 两数相加

    2. 两数相加

    题意

    倒序的数字进行相加;

    解题思路

    数字进行倒序还算是简单的,因为我们正常的运算也是从按照这个顺序,正好可以方便计算;

    实现中的两个方法是一样的,不太懂为啥下面的运行时间查这么多;

    实现

    class Solution(object):
       def addTwoNumbers(self, l1, l2):
           """
          执行用时 : 128 ms, 在Add Two Numbers的Python提交中击败了7.75% 的用户
          内存消耗 : 11 MB, 在Add Two Numbers的Python提交中击败了0.86% 的用户
          :type l1: ListNode
          :type l2: ListNode
          :rtype: ListNode
          """
           dummy = cur = ListNode(0)
           is_decimal = False
           while l1 and l2:
               is_decimal, value = self.get_add_result(val1=l1.val, val2=l2.val, is_decimal=is_decimal)
               node = ListNode(value)
               cur.next = node
               cur = cur.next
               l1 = l1.next
               l2 = l2.next
           while l1:
               is_decimal, value = self.get_add_result(val1=l1.val, is_decimal=is_decimal)
               node = ListNode(value)
               cur.next = node
               cur = cur.next
               l1 = l1.next
           while l2:
               is_decimal, value = self.get_add_result(val2=l2.val, is_decimal=is_decimal)
               node = ListNode(value)
               cur.next = node
               cur = cur.next
               l2 = l2.next
           if is_decimal:
               node = ListNode(1)
               cur.next = node
           return dummy.next

       def get_add_result(self, val1=0, val2=0, is_decimal=False):
           value = val1 + val2 + int(is_decimal)
           if value >= 10:
               value %= 10
               is_decimal = True
           else:
               is_decimal = False
           return is_decimal, value

       def addTwoNumbers2(self, l1, l2):
           """
          执行用时 : 84 ms, 在Add Two Numbers的Python提交中击败了85.84% 的用户
          内存消耗 : 11 MB, 在Add Two Numbers的Python提交中击败了0.86% 的用户
          :type l1: ListNode
          :type l2: ListNode
          :rtype: ListNode
          """
           dummy = cur = ListNode(0)
           digit = 0
           while l1 or l2 or digit:
               if l1:
                   digit += l1.val
                   l1 = l1.next
               if l2:
                   digit += l2.val
                   l2 = l2.next
               node = ListNode(digit % 10)
               cur.next = node
               cur = cur.next
               digit //= 10
           return dummy.next

    提升

    如果这个链表存储的数字的顺序是正常的话,那么有两种方法:

    1. 将链表进行倒序,接着就和上面的实现一样了;

    2. 利用栈将两个链表的值倒序取出来,思想和上面的思想一样;

  • 相关阅读:
    上海电信 华为HG8240R 光猫 破解
    RedSn0w 0.9.10b5 越狱iphone 4 ios 5.0.1 Cydia闪退解决
    用IIS 7.5 Express代替IIS和开发工具vs自带的ASP.NET Development Server
    远程桌面连接问题
    Enterprise Library 5.0 Hands On Lab(1):数据访问程序块(一)
    [Havok] Havok Physics物理引擎的学习入门
    [设计模式] 深入浅出单实例Singleton设计模式(Java版)
    [C#] MD5 加密的具体流程
    [轻音乐] 理查德·克莱德曼专辑[8CD]
    [SEO] [DeDe]优化SEO
  • 原文地址:https://www.cnblogs.com/George1994/p/10576457.html
Copyright © 2011-2022 走看看