117.力扣-兩數相加問題
阿新 • • 發佈:2020-12-15
這個寫的是賊尷尬,人家十幾行寫完了,我寫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)