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)

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值