• 117.力扣-两数相加问题


    这个写的是贼尴尬,人家十几行写完了,我写n多,继续学习哎!

    class Node(object):
        def __init__(self, value):
            self.value = value
            self.next = None
    
        def set_next(self, next):
            self.next = next
    
        def get_next_value(self):
            if self.next:
                return self.next.value
    
    
    class Link(object):
    
        def __init__(self):
            self.root: Node = None
            self.length = 0
    
        def add(self, node: Node):
            if not self.root:
                self.root = node
            else:
                temp = self.root
                while temp.next:
                    temp = temp.next
                temp.next = node
            self.length += 1
    
        def show(self):
            temp = self.root
            while temp.next:
                print(temp.value, end="")
                temp = temp.next
            print(temp.value)
    
        def add_num(self, num: str):
            for item in num:
                node = Node(item)
                self.add(node)
    
    
    if __name__ == '__main__':
        num1 = '9999999999999'
        num2 = '101010101'
    
        l1 = Link()
        l1.add_num(num1[::-1])
        l1.show()
    
        l2 = Link()
        l2.add_num(num2[::-1])
        l2.show()
    
        # print(l1.root.value)
        # print(l2.root.value)
        # print(l1.length)
        # print(l2.length)
    
        def addTwoNumbers(l1: Link, l2: Link):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            if not l1.root and l2.root:
                return l2
    
            if not l2.root and l2.root:
                return l1
    
            if not (l1.root and l2.root):
                print('滚开请不要玩了')
    
            length = min((l1.length, l2.length))
    
            temp1: Node = l1.root
            temp2: Node = l2.root
    
            next_add = 0
    
            new_link = Link()
            while length > 0:
                total = int(temp1.value) + int(temp2.value)
                if next_add > 0:
                    total += next_add
                next_add, cur_num = get_div(total)
                cur_node = Node(cur_num)
                new_link.add(cur_node)
    
                temp1 = temp1.next
                temp2 = temp2.next
                length -= 1
    
            last_temp: Node = temp1 or temp2
            # 处理链表剩余的元素
            while next_add or last_temp:
                while last_temp:
                    next_add, cur_num2 = get_div(int(last_temp.value) + next_add)
                    node = Node(cur_num2)
                    new_link.add(node)
    
                    # if not next_add:
                    # 这里我本来想如果next_add ==0的时候直接将,last_temp的next赋给new_list,但是Link中维持了一个length,这一样会让它出错,而且经过测试之后时间差不多所以就不改了
                    #     new_link.add(last_temp.next)
                    #     last_temp = None
                    #     break
    
                    last_temp = last_temp.next
                else:
                    if next_add:
                        node = Node(next_add)
                        new_link.add(node)
                        next_add = 0
            new_link.show()
    
    
        def get_div(total):
            n, m = divmod(total, 10)  # n是total//10取模的结果,m是total%10除数的结果
    
            return n, m
    
        start = time.time()
        addTwoNumbers(l1, l2)
        print(time.time() - start)
    
    
  • 相关阅读:
    使用CSS3美化复选框checkbox
    MYSQL select时锁定记录问题
    SQL Server中的锁
    T-SQL查询进阶—理解SQL Server中的锁
    SQL:查找被锁的表,以及锁表的SQL语句(重点推荐)
    Mac 常用的手势
    Mac 常用的快捷键
    Mac上的学习神器:Marginnote
    Mac 常用命令介绍
    Mac 上的传奇效率神器 Alfred 3
  • 原文地址:https://www.cnblogs.com/liuzhanghao/p/14137619.html
Copyright © 2020-2023  润新知