【python】【leetcode】【演算法題目2—Add Two Numbers】
阿新 • • 發佈:2018-12-24
一、題目描述
題目原文:
You are given two linked lists representing two non-negative numbers.
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.
(兩個單鏈表分別表示兩個非負整數,表示形式為:數字個位—>數字十位—>數字百位........請以相同的單鏈表的形式返回兩個數的和的結果)
舉例:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8舉例:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
注意:最終結果要用連結串列結構表示,返回指向首節點的物件(Python中一切皆物件)。
二、題目分析
我想到的思路比較直接:先把倆個數字用列表表示出來,再轉化為整型後進行相加,最後構造相加結果的單鏈表返回即可。
三、Python程式碼
#題目中定義的單鏈表類的結構如下: #class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode l1,l2為輸入的待加和的兩個串 """ #將兩個單鏈表串按位掃到列表listnum1和listnum2中 listnum1 = [] listnum2 = [] while l1 != None: listnum1.append(l1.val) l1 = l1.next while l2 != None: listnum2.append(l2.val) l2 = l2.next #將兩個數用整型num1和num2表示出來(**運算為指數運算,eg. 2 ** 3 結果為8) num1 = 0 num2 = 0 for i in range(len(listnum1)): num1 = listnum1[i] * (10 ** i) + num1 for j in range(len(listnum2)): num2 = listnum2[j] * (10 ** j) + num2 #計算結果後,構造結果的單鏈表結構l3 result = num1 + num2 l3 = ListNode(0) p = ListNode(0) p = l3 #l3和p指向首節點,構造過程中l3不動,仍指向首節點,p進行構造移動 while result >= 10: temp = ListNode(None) p.val = result % 10 p.next = temp p = temp result = result / 10 #由於迴圈到最後一個節點時不再構造新節點,於是退出迴圈,並給最後一個節點賦值 p.val = result % 10 return l3
四、其他