solution about leetcode problem 2 add Two Numbers

solution about leetcode problem 2 add Two Numbers


算法1:
代码如下

class Solution:
    # @param {ListNode} l1
    # @param {ListNode} l2
    # @return {ListNode}
    def addTwoNumbers(self, l1, l2):
        carryBit = 0
        retList = ListNode((l1.val + l2.val)%10)
        if l1.val + l2.val >= 10:
            carryBit = 1
        tmp = retList
        while(l1.next or l2.next):
            sumToList = 0
            if l1.next:
                sumToList += l1.next.val
                l1 = l1.next
            if l2.next:
                sumToList += l2.next.val
                l2 = l2.next
            sumToList += carryBit
            tmp.next = ListNode(sumToList % 10)
            if  sumToList >= 10:
                carryBit = 1
            else:
                carryBit = 0
            tmp = tmp.next

        if carryBit == 1:
            tmp.next = ListNode(1)

        return retList

C语言版的

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode * retList = (struct ListNode* ) malloc(sizeof(struct ListNode));
    int sumToAdd = l1->val + l2->val;
    struct ListNode * tmp = retList;
    int carryBit = sumToAdd>=10?1:0;
    tmp->val = sumToAdd % 10;
    while(l1->next || l2->next){
        sumToAdd = 0;
        if(l1->next){
            sumToAdd += l1->next->val;
            l1 = l1->next;
        }
        if(l2->next){
            sumToAdd += l2->next->val;
            l2 = l2->next;
        }
        sumToAdd += carryBit;
        tmp->next = (struct ListNode* ) malloc(sizeof(struct ListNode));
        tmp = tmp->next;
        tmp->val = sumToAdd % 10;
        printf("%d", tmp->val);
        tmp->next = NULL;
        carryBit = sumToAdd>=10?1:0;
    }
    if(carryBit){
        tmp->next = (struct ListNode* ) malloc(sizeof(struct ListNode));
        tmp = tmp->next;
        tmp->val = 1;
        tmp->next = NULL;
    }
    return retList;
}

算法思路:
大体就是遍历两个列表,然后一个个加起来就是了,算法很简单!


算法2:
代码如下

class Solution:
    # @param {ListNode} l1
    # @param {ListNode} l2
    # @return {ListNode}
    def list2Number(self, listnode):
        a = listnode.val
        power = 10
        while(listnode.next):
            a = a + listnode.next.val * power
            power *= 10
            listnode = listnode.next
        return a

    def number2List(self, num):
        ret = ListNode(num % 10)
        tmp = ret
        num /= 10
        while(num):
            tmp.next = ListNode(num % 10)
            tmp = tmp.next
            num /= 10
        return ret

    def addTwoNumbers(self, l1, l2):
        num1 = self.list2Number(l1)
        num2 = self.list2Number(l2)
        sum = num1 + num2
        return self.number2List(sum)

算法思路:
先把列表转换成数字,Python在运算大数方面具有天然优势,计算出来两个数字的和,然后转换成列表,返回就好了!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值