Leetcode刷题之两数相加

目录

 

1、序言

2、两数相加

2.1 题目

2.2 思路

2.3 解题

2.4 结果


1、序言

        引用大学室友的名言:人生啊,就是如此的艰难与困苦。现在发现刷题也是进入好公司的必备环节了(前几天面试一个北京公司,问了我几道题,答的相当垃圾,虽然自己不想去北京,但是这次面试还是很有警醒意味的,而且之后还被兄弟嘲笑彩笔,555~),自己是野路子出生(非科班)的算法工程师,一些基础的东西还是不行。所以我要刷leetcode了。这里会记录leetcode 1~100道里面的中等难度以上的题。

2、两数相加

2.1 题目

       给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.


 

2.2 思路

     自己认为有两种思路,第一种是将链表转化为数字,然后相加,然后倒序输出并转化为链表。第二种是直接在链表的每个节点对应相加,逢10进1!

2.3 解题

    思路一:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        l1_num = self.get_num(l1)
        l2_num = self.get_num(l2)
        reversed_result = l1_num + l2_num
        result_string = str(reversed_result)[::-1]
        listnode = ListNode(int(result_string[0]))
        result = listnode
        if len(result_string) == 0:
            result
        for i in range(1, len(result_string)):
            listnode.next = ListNode(int(result_string[i]))
            listnode = listnode.next
        return result

    def get_num(self, ln):
        ln_list = []
        while ln:
            val = ln.val
            ln = ln.next
            ln_list.append(str(val))
        ln_num = int(''.join(ln_list))
        return ln_num

  但是思路一没有通过以下case,如果有兴趣你们可以按照这个思路继续完善(假设有人看~),思路一比较麻烦。

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

  思路二 :

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        flag = 1
        result = ret = ListNode()
        advance = 0
        while flag:
            l1_val = l1.val 
            l2_val = l2.val 
            if (l1_val + l2_val + advance) >= 10:
                ret.next = ListNode((l1_val + l2_val +advance)%10)
                advance = 1
            else:
                ret.next = ListNode(l1_val + l2_val)
                ret.next.val += advance
                advance = 0

            if l1.next == None and l2.next == None and advance==0:
                flag = 0
            else:
                l1 = l1.next if l1.next else ListNode()
                l2 = l2.next if l2.next else ListNode()
                ret = ret.next
        return result.next

2.4 结果

执行结果:通过
显示详情
执行用时:80 ms, 在所有 Python3 提交中击败了30.77%的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了65.49%的用户

   代码效率不高,也提交测试了好多次,哎,通过就行了~

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超超爱AI

土豪请把你的零钱给我点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值