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

相关文章
相关标签/搜索