溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何實現兩個數字相加

發布時間:2021-12-15 14:30:02 來源:億速云 閱讀:133 作者:小新 欄目:大數據

LeetCode如何實現兩個數字相加

在LeetCode上,實現兩個數字相加是一個經典的算法問題。這個問題通常以鏈表的形式出現,要求我們將兩個表示非負整數的鏈表相加,并返回一個新的鏈表來表示它們的和。本文將詳細介紹如何解決這個問題。

問題描述

給定兩個非空鏈表,表示兩個非負整數。每個鏈表中的節點表示一個數字位,且鏈表中的數字是逆序存儲的。例如,鏈表 2 -> 4 -> 3 表示數字 342。我們的任務是將這兩個鏈表表示的數字相加,并返回一個新的鏈表來表示它們的和。

解題思路

  1. 初始化變量:我們需要一個變量 carry 來存儲進位值,初始值為 0。同時,我們需要一個虛擬頭節點 dummy 來簡化鏈表的操作,以及一個指針 current 來跟蹤當前節點。

  2. 遍歷鏈表:我們同時遍歷兩個鏈表,直到兩個鏈表都到達末尾。在每次迭代中,我們計算當前節點的值以及進位值的和,然后更新 carry 和當前節點的值。

  3. 處理進位:如果遍歷結束后 carry 仍然大于 0,我們需要在結果鏈表的末尾添加一個新節點來存儲這個進位值。

  4. 返回結果:最后,我們返回虛擬頭節點的下一個節點,即結果鏈表的頭節點。

代碼實現

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
    dummy = ListNode(0)
    current = dummy
    carry = 0
    
    while l1 or l2 or carry:
        val1 = l1.val if l1 else 0
        val2 = l2.val if l2 else 0
        total = val1 + val2 + carry
        carry = total // 10
        current.next = ListNode(total % 10)
        current = current.next
        
        if l1:
            l1 = l1.next
        if l2:
            l2 = l2.next
    
    return dummy.next

復雜度分析

  • 時間復雜度:O(max(n, m)),其中 nm 分別是兩個鏈表的長度。我們需要遍歷兩個鏈表中的每一個節點。
  • 空間復雜度:O(max(n, m)),結果鏈表的長度最多為 max(n, m) + 1。

總結

通過上述方法,我們可以有效地解決LeetCode上的兩個數字相加問題。關鍵在于正確處理進位和鏈表的遍歷。希望本文能幫助你更好地理解這個問題,并在實際編程中應用這一算法。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女