LeetCode 每日一题 2026/9/7-2026/9/13

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • [9/7 940. 不同的子序列 II](#9/7 940. 不同的子序列 II)
      • [9/8 3870. 统计范围内的逗号](#9/8 3870. 统计范围内的逗号)
      • [9/9 3871. 统计范围内的逗号 II](#9/9 3871. 统计范围内的逗号 II)
      • [9/10 2265. 统计值等于子树平均值的节点数](#9/10 2265. 统计值等于子树平均值的节点数)
      • [9/11 3483. 不同三位偶数的数目](#9/11 3483. 不同三位偶数的数目)
      • 9/12
      • 9/13

9/7 940. 不同的子序列 II

动态规划 dpi 代表以si结尾的子序列数目

如果a<b sa=sb 则dpa,dpb会存在重复的子序列

但是dpa必定是dpb的真子集 只要将dpa中的sa变为sb及全部包含进了dpb

所以对于dpi只要记录0\~i-1间的最近的不同字符dp

res0,25分别记录a~z最近的位置

python 复制代码
def distinctSubseqII(s):
    """
    :type s: str
    :rtype: int
    """
    res = [-1]*26
    MOD = 10**9+7
    n= len(s)
    dp = [1]*n
    for i,c in enumerate(s):
        for j in range(26):
            if res[j]!=-1:
                dp[i] = (dp[i]+dp[res[j]])%MOD
        res[ord(s[i])-ord('a')] = i
        
    ans = 0
    for i in range(26):
        if res[i]!=-1:
            ans = (ans+dp[res[i]])%MOD
    return ans

9/8 3870. 统计范围内的逗号

1000开始有1个逗号 因为n<100000

最多一个数就一个逗号 统计有多少个大于999的数即刻

python 复制代码
def countCommas(n):
    """
    :type n: int
    :rtype: int
    """
    return max(0,n-999)

9/9 3871. 统计范围内的逗号 II

从右边每三位插一个逗号,不足四位没有逗号。

1,999 贡献 0;1000,999999 贡献 1;1000000,999999999 贡献 2,依此类推。

从 1000 起每次乘 1000,所有 >= x 的数各再贡献一个逗号,累加 n-x+1 直到 x>n。

python 复制代码
def countCommas(n):
    """
    :type n: int
    :rtype: int
    """
    ans = 0
    x = 1000
    while x <= n:
        ans += n - x + 1
        x *= 1000
    return ans

9/10 2265. 统计值等于子树平均值的节点数

递归 统计左右子树的总和和节点数,如果当前节点的值等于子树的平均值,则计数加1。

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def averageOfSubtree(root):
    """
    :type root: TreeNode
    :rtype: int
    """
    global ans
    ans = 0
    def check(node):
        if not node:
            return 0, 0
        left_sum, left_count = check(node.left)
        right_sum, right_count = check(node.right)
        total_sum = node.val + left_sum + right_sum
        total_count = 1 + left_count + right_count
        if total_sum // total_count == node.val:
            global ans
            ans += 1
        return total_sum, total_count
    check(root)
    return ans

9/11 3483. 不同三位偶数的数目

从 digits 里选三个不同下标组成三位数,个位必须是偶数,百位不能为 0,求不同数值的个数。

数组长度不超过 10,三层枚举所有下标组合,用集合去重后返回大小即可。

python 复制代码
def totalNumbers(digits):
    """
    :type digits: List[int]
    :rtype: int
    """
    s = set()
    n = len(digits)
    for i in range(n):
        if digits[i] % 2:
            continue
        for j in range(n):
            if j == i:
                continue
            for k in range(n):
                if k == i or k == j or digits[k] == 0:
                    continue
                s.add(digits[k] * 100 + digits[j] * 10 + digits[i])
    return len(s)

9/12

python 复制代码

9/13

python 复制代码

相关推荐
kanhaoning1 小时前
Agent 记忆出现重复和矛盾怎么优化:我实测了6种去重和更新策略,找到了低成本维护记忆质量的方法
算法
hans汉斯2 小时前
【计算机科学与应用】层级评论上下文依赖识别数据集构建与研究——以小红书旅游评论数据为例
人工智能·算法·yolo·目标检测·cnn·旅游
码行山野赴时序归途2 小时前
顺序表(Sequential List)详解:从数组到 C 语言实现
c语言·开发语言·数据结构·算法
Lokey8683 小时前
自注意力机制与多头注意力机制
算法
linx2953 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
Benny_Tang3 小时前
P7514 [省选联考 2021 A/B 卷] 卡牌游戏 题解
c++·算法
residual_fan3 小时前
经验模态重构:直向工业时间序列数据的数据扩增方法
人工智能·算法·重构·数据挖掘·数据分析
aramae3 小时前
模拟实现strcpy(字符串拷贝)(C语言)
java·c语言·开发语言·算法
Benny_Tang3 小时前
「雅礼集训 2018 Day7」A 题解
数据结构·c++·算法