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 复制代码

相关推荐
zhangfeng113335 分钟前
国产GPU/AI算力芯片现状(修订完整版 · 截至2026年9月
人工智能·算法·ai编程·npu
学代码的CJY1 小时前
从代码出发理解时间复杂度与空间复杂度
数据结构·算法
白帽攻防录1 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
小O的算法实验室2 小时前
IEEE TEVC,基于精确与DQN群智能调度方法用于多目标异构USV
算法
可乐ea2 小时前
AI Agent 工具调用准确性评测:选择错误与参数错误分开测
大数据·人工智能·算法·大模型·工具调用·ai智能体·agent评测
上位机妹子3 小时前
C 语言 数组删除指定元素(快慢指针法)
c语言·数据结构·算法
心中有你02143 小时前
【路径规划】A*寻路算法最通俗易懂讲解(C语言完整实现+详细注释)
c语言·开发语言·算法
papaofdoudou4 小时前
初中数学-整数整除判定法全解:从 2 到 19 的方法、依据与证明
算法
让学习成为一种生活方式4 小时前
啤酒花基因组与重测序--Nature Communications
人工智能·算法
l1t4 小时前
DeepSeek总结的OpenZL压缩变换器
c++·算法