美文网首页
每日Leetcode—算法(17)

每日Leetcode—算法(17)

作者: Chuck_Wu | 来源:发表于2019-05-24 21:20 被阅读0次

    2.两数相加

    算法:

    def addTwoNumbers(self, l1, l2):
        if l1 == None:       #如果为空,则直接返回另一个链表
            return l2
        if l2 == None:
            return l1
        flag = 0             #相加大于10,则flag为1,否则为0
        tmp = ListNode(0)      #创建新链表
        res = tmp         #返回时用res结点
        while l1 or l2:
            tmps = 0         #相加后的结果
            if l1:         #当l1不为空时,先加l1
                tmps = l1.val      #l1的值赋给tmps
                l1 = l1.next      #往下走一步
            if l2:         #当l2不为空时,先加l2
                tmps += l2.val      #l2的值加到tmps
                l2 = l2.next      #往下走一步
            tmpres = ((tmps+flag)%10)       #取模放入tmpres
            flag = ((tmps+flag)//10)        #如果相加大于10,则将整除结果赋值给flag
            res.next = ListNode(tmpres)         #将tmpres加入res的下一个节点
            res = res.next      #往下走一步
            if flag:
                res.next = ListNode(1)        #flag的值只为1或0,如为1,则加入res.next
            res = tmp.next          #从tmp.next处返回
            del tmp
            return res
    

    3. 无重复字符的最长子串

    算法:

    def lengthOfLongestSubstring(self, s):
        dic = {}     #声明字典用来保存字符
        i, ans = 0,0
        for j in range(len(s)):
            if s[j] in dic:            #如果字符在字典里,则对比字符值与i进行对比,较大者赋值给i
                i = max(dic[s[j]], i)       #这里的i为重复字符的下标
            ans = max(j - i + 1, ans)       #j+1-i为下标加一,减去重复字符的下标
            dic[s[j]] = j + 1     #将字符存入字典
        return ans
    

    相关文章

      网友评论

          本文标题:每日Leetcode—算法(17)

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