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

相关推荐
小雉系统10 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
唐墨12314 小时前
linux kernel 比较数据大小的宏定义
linux·算法
拂拉氏14 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口
通信小呆呆19 小时前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落19 小时前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black20 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967979121 天前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔1 天前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆1 天前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac