美文网首页
leetcode 两数相加

leetcode 两数相加

作者: 7赢月 | 来源:发表于2020-04-14 18:20 被阅读0次

题目描述:

https://leetcode-cn.com/problems/add-two-numbers-ii/

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    // 获取两个链表长度
    if l1 == nil || l2 == nil {
        return nil
    }
    var (
        ret = l1
    )
    l1Len := GetListLen(l1)
    l2Len := GetListLen(l2)
    if l1Len > l2Len {
        ret = l1
    }
    if l1Len < l2Len {
        ret = l2
    }
    if n := insertNumberV2(l1, l2, ret, l1Len, l2Len); n != 0 {
        return &ListNode{
            Val:  n,
            Next: ret,
        }
    }
    return ret
}

func GetListLen(l *ListNode) int {
    var n = 1
    for {
        if l.Next != nil {
            n++
            l = l.Next
        } else {
            return n
        }
    }
}
func insertNumberV2(l1, l2, l3 *ListNode, l1Len, l2Len int) int {
    if l1.Next == nil && l2.Next == nil {
        var ret = l1.Val + l2.Val
        l3.Val = ret % 10
        return ret / 10
    }
    if l1Len > l2Len {
        ret := insertNumberV2(l1.Next, l2, l3.Next, l1Len-1, l2Len)
        if ret != 0 {
            total := l1.Val + ret
            l3.Val = total % 10
            return total / 10
        }
        return 0
    }
    if l1Len < l2Len {
        ret := insertNumberV2(l1, l2.Next, l3.Next, l1Len, l2Len-1)
        if ret != 0 {
            total := l2.Val + ret
            l3.Val = total % 10
            return total / 10
        }
        return 0
    }
    // 相加
    ret := insertNumberV2(l1.Next, l2.Next, l3.Next, l1Len-1, l2Len-1)
    total := l1.Val + l2.Val + ret
    l3.Val = total % 10
    return total / 10
}


func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    // 获取两个链表长度
    if l1 == nil || l2 == nil {
        return nil
    }
    var (
        ret = l1
    )
    l1Len := GetListLen(l1)
    l2Len := GetListLen(l2)
    if l1Len > l2Len {
        ret = l1
    }
    if l1Len < l2Len {
        ret = l2
    }
    if n := insertNumberV2(l1, l2, ret, l1Len, l2Len); n != 0 {
        return &ListNode{
            Val:  n,
            Next: ret,
        }
    }
    return ret
}

func GetListLen(l *ListNode) int {
    var n = 1
    for {
        if l.Next != nil {
            n++
            l = l.Next
        } else {
            return n
        }
    }
}
func insertNumberV2(l1, l2, l3 *ListNode, l1Len, l2Len int) int {
    if l1.Next == nil && l2.Next == nil {
        var ret = l1.Val + l2.Val
        l3.Val = ret % 10
        return ret / 10
    }
    if l1Len > l2Len {
        ret := insertNumberV2(l1.Next, l2, l3.Next, l1Len-1, l2Len)
        if ret != 0 {
            total := l1.Val + ret
            l3.Val = total % 10
            return total / 10
        }
        return 0
    }
    if l1Len < l2Len {
        ret := insertNumberV2(l1, l2.Next, l3.Next, l1Len, l2Len-1)
        if ret != 0 {
            total := l2.Val + ret
            l3.Val = total % 10
            return total / 10
        }
        return 0
    }
    // 相加
    ret := insertNumberV2(l1.Next, l2.Next, l3.Next, l1Len-1, l2Len-1)
    total := l1.Val + l2.Val + ret
    l3.Val = total % 10
    return total / 10
}

以上,第一项使用递归·而第二项使用栈


递归

引用

https://leetcode-cn.com/problems/add-two-numbers-ii/submissions/

相关文章

  • LeetCode-454-四数相加 II

    LeetCode-454-四数相加 II 454. 四数相加 II[https://leetcode-cn.com...

  • leetcode两数相加

    给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表...

  • [LeetCode] 两数相加

    给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表...

  • leetcode 两数相加

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

  • LeetCode 两数相加

    感觉这题就是在帮我跳出大数相加的坑这是我自己的答案,在long范围内都是对的,但是数字超过取值范围的时候就崩溃了,...

  • 两数相加【LeetCode】

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

  • LeetCode——两数相加

    题目描述 一、CPP链表遍历相加 解题思路:思路很简单,就是一起遍历两个链表,把其值加起来,使用尾插法插入一个新的...

  • 两数相加--LeetCode

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

  • 【LeetCode】两数相加

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

  • leetcode:两数相加

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

网友评论

      本文标题:leetcode 两数相加

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