LeetCode 中等难度题
2、两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
l3 = ListNode(0)
re = l3
flag = False
while l1 and l2:
tmp = l1.val + l2.val
if flag:
tmp = tmp + 1
if tmp > 9:
tmp = tmp - 10
flag = True
p = ListNode(tmp)
l3.next = p
del(p)
else:
flag = False
p = ListNode(tmp)
l3.next = p
del(p)
else:
if tmp > 9:
tmp = tmp - 10
flag = True
p = ListNode(tmp)
l3.next = p
del(p)
else:
flag = False
p = ListNode(tmp)
l3.next = p
del(p)
l1 = l1.next
l2 = l2.next
l3 = l3.next
# 若l1比l2长
while l1:
if flag:
tmp = l1.val
tmp = tmp + 1
if tmp > 9:
tmp = tmp - 10
flag = True
p = ListNode(tmp)
l3.next = p
del(p)
else:
flag = False
p = ListNode(tmp)
l3.next = p
del(p)
else:
tmp = l1.val
if tmp > 9:
tmp = tmp - 10
flag = True
p = ListNode(tmp)
l3.next = p
del(p)
else:
flag = False
p = ListNode(tmp)
l3.next = p
del(p)
l1 = l1.next
l3 = l3.next
# 若l2比l1长
while l2:
if flag:
tmp = l2.val
tmp = tmp + 1
if tmp > 9:
tmp = tmp - 10
flag = True
p = ListNode(tmp)
l3.next = p
del(p)
else:
flag = False
p = ListNode(tmp)
l3.next = p
del(p)
else:
tmp = l2.val
if tmp > 9:
tmp = tmp - 10
flag = True
p = ListNode(tmp)
l3.next = p
del(p)
else:
flag = False
p = ListNode(tmp)
l3.next = p
del(p)
l2 = l2.next
l3 = l3.next
# 若读完之后flag仍为True,表明还有进位现象存在,需要再添加一个节点
if flag:
p = ListNode(1)
l3.next = p
del(p)
return re.next
3、无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例 4:
输入: s = “”
输出: 0
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
类似于滑动窗口方法
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if len(s) == 0:
return 0
if len(s) == 1:
return 1
s_tmp = ""
l = []
flag = False # 是否读到最后
for i in range(len(s) - 1):
s_tmp += s[i]
for j in range(i+1,len(s)):
flag = False
if s[j] not in s_tmp:
s_tmp += s[j]
else:
l.append(len(s_tmp))
s_tmp = ""
flag = True
break
if not flag:
l.append(len(s_tmp))
s_tmp = ""
flag = False
return max(l)