meishaoming / blog

MIT License
1 stars 2 forks source link

leetcode - 0002 add-two-numbers #66

Open meishaoming opened 4 years ago

meishaoming commented 4 years ago

https://leetcode-cn.com/problems/add-two-numbers

解法一

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

def listNode2int(list_node):
    val = 0
    node = list_node
    power = 0
    while True:
        val += node.val * (10**power)
        power += 1
        node = node.next
        if node is None:
            break
    return val

def int2listNode(n):
    head = None
    last_node = None
    while True:
        x = n % 10
        new_node = ListNode(x)
        if last_node:
            last_node.next = new_node

        last_node = new_node
        if head is None:
            head = new_node

        n = n // 10
        if n == 0:
            break
    return head

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        n1 = listNode2int(l1)
        n2 = listNode2int(l2)
        return int2listNode(n1+n2)

竟然一次就通过了

image

解法二:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(0)
        node = head
        overflow = 0
        while True:
            val = overflow
            if l1 is not None:
                val += l1.val
                l1 = l1.next
            if l2 is not None:
                val += l2.val
                l2 = l2.next
            if val >= 10:
                val -= 10
                overflow = 1
            else:
                overflow = 0
            node.val = val

            if l1 is None and l2 is None and overflow == 0:
                break
            node.next = ListNode(0)
            node = node.next
        return head

同一份代码,连续跑两次,速度差很多,可能是由于缓存原因。

排名也差很多,说明大家的时间都在这个范围内。

image image