美文网首页
2.两数相加

2.两数相加

作者: Jerry_589e | 来源:发表于2019-03-20 11:22 被阅读0次

    题目

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

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

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

    示例:

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

    解题

    C++版本:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            int sum = 0;
            int flag = 0;
            sum = l1->val + l2->val;
            if(sum >= 10){
                sum = sum - 10;
                flag = 1;
            }
            l1->val = sum;
            ListNode* node = new ListNode(0);
            if(l1->next != NULL || l2->next != NULL){//至少有一个存在下一个数
                if(l1->next == NULL)
                    l1->next = node;
                if(l2->next == NULL)
                    l2->next = node;
                if(flag==1){
                    l1->next->val = l1->next->val +1;
                    flag = 0;
                }
                addTwoNumbers(l1->next,l2->next);//递归
            }
            else{//都不存在下一个数
                if(flag == 1){
                    l1->next = new ListNode(1);
                    flag = 0;
                }
            }
            return l1;
        }
    };
    

    较慢


    C++版本提交

    Python3版本:

    class Solution:
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            re = ListNode(0)
            r=re
            carry=0
            while(l1 or l2):
                x= l1.val if l1 else 0
                y= l2.val if l2 else 0
                s=carry+x+y
                carry=s//10
                r.next=ListNode(s%10)
                r=r.next
                if(l1!=None):l1=l1.next
                if(l2!=None):l2=l2.next
            if(carry>0):
                r.next=ListNode(1)
            return re.next
    

    好像也不快


    Python版本提交

    相关文章

      网友评论

          本文标题:2.两数相加

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