【LeetCode】2. Add Two Numbers解題報告(Python)
3366 ワード
タイトル:.2つのチェーンテーブルを取得します.チェーンテーブルの内容は非負の整数で、数値の逆の順序で格納されます.各ノードには、1つの数値を含む2つのチェーンテーブルの整数が加算され、チェーンテーブルとして返されます.
例:
以下の状況に特に注意してください.
テストケース
説明
L1 = [0,1] l2 = [0,1,2]
あるリストが別のリストより長い場合.
L1 = [] l2 = [0,1]
リストが空の場合は、空のリストを表します.
L1 = [9,9] l2 = [1]
総和は最後に1つ追加で持ち運ぶことができ、忘れやすいです.
コードの説明:
1,判断L 1は空戻りL 2,L 2は空戻りL 1
2、初期化変数
3、l 1またはl 2が空でない限り、循環加算し、加算するたびにフラグのみを加算し、10対10を超えて余剰を取り、フラグを真にする(pythonで加算を行う場合、Trueは1、Falseは0)
4、返却チェーンテーブルの最後に追加してポインタを後ろに移動
5,ループを飛び出して結果を返す
完全なコード(自己テスト用、コミットコードは下):
コミットコード(ソリューションクラスのみをコミット):
例:
:(2 - > 4 - > 3)+(5 - > 6 - > 4)
: 7 - > 0 - > 8
: 342 + 465 = 807。
以下の状況に特に注意してください.
テストケース
説明
L1 = [0,1] l2 = [0,1,2]
あるリストが別のリストより長い場合.
L1 = [] l2 = [0,1]
リストが空の場合は、空のリストを表します.
L1 = [9,9] l2 = [1]
総和は最後に1つ追加で持ち運ぶことができ、忘れやすいです.
コードの説明:
1,判断L 1は空戻りL 2,L 2は空戻りL 1
2、初期化変数
carry = 0 #
ret = ListNode(0) #
ret_Last = ret #
3、l 1またはl 2が空でない限り、循環加算し、加算するたびにフラグのみを加算し、10対10を超えて余剰を取り、フラグを真にする(pythonで加算を行う場合、Trueは1、Falseは0)
4、返却チェーンテーブルの最後に追加してポインタを後ろに移動
ret_Last.next = ListNode(sum % 10) #
ret_Last = ret_Last.next #
5,ループを飛び出して結果を返す
ret = ret.next # 0,
if carry:
ret_Last.next = ListNode(1) # True 1
del ret_Last #
return ret #
完全なコード(自己テスト用、コミットコードは下):
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# @return a ListNode
def addTwoNumbers(self, l1, l2):
if l1 is None:
return l2
elif l2 is None:
return l1
else:
carry = 0
ret = ListNode(0)
ret_Last = ret
while(l1 or l2):
sum = 0
if l1:
sum += l1.val
l1 = l1.next
if l2:
sum += l2.val
l2 = l2.next
sum += carry
ret_Last.next = ListNode(sum % 10)
ret_Last = ret_Last.next
carry = (sum >= 10)
ret = ret.next
if carry:
ret_Last.next = ListNode(1)
del ret_Last
return ret
def myPrintList(l):
while(True):
print(l.val)
if l.next is not None:
l = l.next
else:
print()
break
if __name__ == '__main__':
# 342 + 465 = 807
l1_1 = ListNode(3)
l1_2 = ListNode(4)
l1_3 = ListNode(2)
l1_1.next = l1_2
l1_2.next = l1_3
l2_1 = ListNode(4)
l2_2 = ListNode(6)
l2_3 = ListNode(5)
l2_1.next = l2_2
l2_2.next = l2_3
l3 = Solution().addTwoNumbers(l1_1, l2_1)
myPrintList(l3)
コミットコード(ソリューションクラスのみをコミット):
class Solution:
# @return a ListNode
def addTwoNumbers(self, l1, l2):
if l1 is None:
return l2
elif l2 is None:
return l1
else:
carry = 0
ret = ListNode(0)
ret_Last = ret
while(l1 or l2):
sum = 0
if l1:
sum += l1.val
l1 = l1.next
if l2:
sum += l2.val
l2 = l2.next
sum += carry
ret_Last.next = ListNode(sum % 10)
ret_Last = ret_Last.next
carry = (sum >= 10)
ret = ret.next
if carry:
ret_Last.next = ListNode(1)
del ret_Last
return ret