LeetCode 刷題筆記 - 2. 兩數相加

難度:

中等node

描述:

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。 若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。swift

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
緣由:342 + 465 = 807
複製代碼

來源:力扣(LeetCode) 連接:leetcode-cn.com/problems/ad… 著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。bash


語言:

swift網絡

解析:

這題就像在小學的時候學習筆算數學加減法。 好比計算123 + 678,首先個位相加,3 + 8 = 11,等於10 + 1,溢出了1,因而十位數相加的時候變爲2 + 8 + 1 = 10,以此類推。咱們能夠在計算的時候都假設上一位溢出了n / 10,因而每位的計算變成了 a + b + sumFlow學習

須要注意的是:首位的sumFlow值爲0,在兩個數字位數長度不一樣的時候,給短的數字高位補0,在計算到最後一位的時候,要判斷是否還有上一位的sumFlow,若是有的話須要在最高位繼續補上。ui

而後就是配合鏈表的使用。spa

代碼以下:code

class Solution {
    func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
        var listOne = l1, listTwo = l2, sumList = ListNode(0)
        var sumFlow : Int = 0
        var node = sumList
    
        while (listOne != nil) || (listTwo != nil) {
            let numberSum = (listOne?.val ?? 0) + (listTwo?.val ?? 0)
            var sum = numberSum + sumFlow
            if sum >= 10 {
                sumFlow = sum / 10
                sum = sum - 10
            }
            else {
                sumFlow = 0
            }
            let listNode = ListNode(sum)
            node.next = listNode
            node = node.next!
            listOne = listOne?.next
            listTwo = listTwo?.next
        }
        if sumFlow > 0 {
            node.next = ListNode(sumFlow)
        }
        return sumList.next
    }
}
複製代碼

總結

這裏用到的鏈表是最初級的操做,挺有意思的,其餘沒啥太大難度。leetcode

相關文章
相關標籤/搜索