每日Leetcode—算法(17)

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))