美文网首页
Swift 力扣第二题:两数相加

Swift 力扣第二题:两数相加

作者: 码农淏 | 来源:发表于2020-04-02 17:05 被阅读0次

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

一次解答:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */

 extension ListNode {
     public func getLast() -> ListNode? {
        
        var tempListNote: ListNode? = self
        while tempListNote?.next != nil {
            tempListNote = tempListNote!.next
        }
        return tempListNote
    }
    
    public func arr() -> [Int] {
        var arr: [Int] = []
        arr.append(val)
        guard self.next != nil else {
            return arr
        }
        var node: ListNode? = self
        while node?.next != nil {
            node = node!.next
            arr.append(node!.val)
        }
        return arr
    }
 }
class Solution {
    func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? {
        
         let l1Arr = l1?.arr() ?? []
        let l2Arr = l2?.arr() ?? []
        let smallArr: [Int]
        let bigArr: [Int]
        if l1Arr.count < l2Arr.count {
            smallArr = l1Arr
            bigArr = l2Arr
        } else {
            smallArr = l2Arr
            bigArr = l1Arr
        }
        var result: ListNode?
        var moreThanTen = false
        
        func addNum(num1: Int, num2: Int) -> Int {
            let result = num1 + num2 + (moreThanTen ? 1 : 0)
            if result >= 10 {
                moreThanTen = true
                return result - 10
            } else {
                moreThanTen = false
                return result
            }
        }
        
        for i in 0..<bigArr.count {
            var num1: Int = 0
            let num2: Int = bigArr[i]
            var num: Int = 0
            if i < smallArr.count {
                num1 = smallArr[i]
                num = addNum(num1: num1, num2: num2)
            } else {
                num = addNum(num1: 0, num2: num2)
            }
            if result == nil {
                result = ListNode.init(num)
            } else {
                result?.getLast()?.next = ListNode.init(num)
            }
        }
        
        if moreThanTen {
            result?.getLast()?.next = ListNode.init(1)
        }
        
        return result
    }
}

执行结果:通过
执行用时 : 64 ms
在所有 Swift 提交中击败了54.10%的用户
内存消耗 :20.6 MB, 在所有 Swift 提交中击败了70.73%的用户

嗯.很一般的成绩
思考:
实战项目中可以通过实现subscript方法实现下标的取值
description属性重载日志输出
增加append、insert、removeAll、remove、removeLast方法快速访问元素,在方法内进行方法优化,这里因为是解题不做过多用不上的方法的实现

相关文章

  • 二进制求和

    力扣67题 思路:类似力扣第二题,相加之后模(%)进制数获得当前位数的值,然后用相加之后的数除以进制数,获得进位的...

  • Swift 力扣第二题:两数相加

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • 算法和数据结构之小白(三)

    力扣第三题(两数相加) 1. 题目 2. 思路 while 循环 3. 解法 while循环 点击提交记录里的通过...

  • 力扣刷题——2. 两数相加

    题目 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能...

  • 力扣百题-2. 两数相加

    使用虚拟头结点进行处理,要注意计算到最后考虑进位是否还有数值 这里有一个效率比较,直接使用三目运算符效率比进行除法...

  • 力扣2. 两数相加

    题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 ...

  • 两数相加 II(golang)

    原题:两数相加 II 使用栈,其它与两数相加(golang)类似

  • 两数相加-Swift

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...

  • 两数相加 swift

    单向链表实现题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,...

  • ATRS第1周

    ATRS Algorithm算法题: 两数之和 - 力扣 (LeetCode) ``` function twoS...

网友评论

      本文标题:Swift 力扣第二题:两数相加

      本文链接:https://www.haomeiwen.com/subject/zrkxphtx.html