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