Leetcode::Add Two Numbers
11600 ワード
Problem
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Example 2:Input: l1 = [0], l2 = [0]
Output: [0]
Example 3:Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
Constraints:[1, 100]
. Node.val
<= 9 Guess
Solution 1
これはリストタイプの演算方法を最大限に利用する方法である.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
ans1, ans2 = [], []
def dfs(head, ans):
if head == None:
return
ans.append(head.val)
dfs(head.next, ans)
def makeListNode(prev, idx):
if idx == len(ans):
prev.next = None
answer = prev
return
tmp = ListNode(ans[idx])
prev.next = tmp
answer = prev
makeListNode(tmp, idx+1)
dfs(l1, ans1)
dfs(l2, ans2)
ans1.reverse()
ans2.reverse()
ans1 = "".join(list(map(str, ans1)))
ans2 = "".join(list(map(str, ans2)))
ans = list(str(int(ans1) + int(ans2)))
ans.reverse()
head = ListNode(ans[0])
answer = head
makeListNode(head, 1)
return answer
これは.惨めである
再帰的であるため,再複文よりもスタックスペースが多く,+タイプ変換が複数回行われるのは当然の結果である.
carry
を用いて初等数学加算を実現することは定解である.サイトを手に入れたので、もう一度開けてみましょう.
Solution 1
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
answer = ListNode()
head = answer
carry = 0
while l1 or l2 or carry:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
carry, res = divmod(val1 + val2 + carry, 10)
head.next = ListNode(res)
head = head.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return answer.next
振り返る
簡単に考えるのはかえって簡単な問題だ.
ずっと方法を使いたいと思っていたので、不要なタイプ変換や再帰演算などが増えました.
もう一度慎重に考えてから解決してもいいです.
Reference
この問題について(Leetcode::Add Two Numbers), 我々は、より多くの情報をここで見つけました https://velog.io/@wisepine/Leetcode-Add-Two-Numbersテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol