当前位置: 首页 > news >正文

3337. 字符串转换后的长度 II

3337. 字符串转换后的长度 II

# 定义了一个大质数 MOD,用于取模运算,防止数值溢出。
MOD = 1_000_000_007# 矩阵乘法 mul
def mul(a:List[List[int]], b:List[List[int]]) -> List[List[int]]:# 输入两个矩阵 a 和 b,返回它们的矩阵乘积 a @ b。# 使用列表推导式计算矩阵乘法的每个元素,并对结果取模。return [[sum(x * y for x, y in zip(row, col)) % MOD for col in zip(*b)]for row in a] # 矩阵快速幂 pow_mul
def pow_mul(a: List[List[int]], n: int, f0: List[List[int]]) -> List[List[int]]:res = f0while n:if n & 1:res = mul(a, res)a = mul(a, a)n >>= 1return resclass Solution:def lengthAfterTransformations(self, s: str, t: int, nums: List[int]) -> int:SIZE = 26f0 = [[1] for _ in range(SIZE)]m = [[0] * SIZE for _ in range(SIZE)]for i, c in enumerate(nums):for j in range(i + 1, i + c + 1):m[i][j % SIZE] = 1mt = pow_mul(m, t, f0)ans = 0for ch, cnt in Counter(s).items():ans += mt[ord(ch) - ord('a')][0] * cntreturn ans % MOD

[sum(x * y for x, y in zip(row, col)) % MOD for col in zip(*b)  解析

这段代码是一个列表推导式,用于计算两个矩阵(或二维数组)的乘积后对每个元素取模.

1. 外层结构:列表推导式

这是一个列表推导式,它会遍历 zip(*b) 的每一个元素(命名为 col),然后计算 sum(x * y for x, y in zip(row, col)) % MOD,最终将所有结果组成一个列表返回。

2. zip(*b):矩阵转置
  • b 是一个二维数组(矩阵),zip(*b) 是 Python 中矩阵转置的惯用写法。
  • b = [[1, 2, 3],[4, 5, 6]]
    zip(*b)  # 相当于 zip([1, 4], [2, 5], [3, 6])
    它会返回一个迭代器,每次迭代得到的是 b 的一列(即 [1, 4][2, 5][3, 6])。
3. sum(x * y for x, y in zip(row, col)):点积计算
  • row 是矩阵 a 的某一行,col 是矩阵 b 的某一列(因为 zip(*b) 是转置后的列)。
  • zip(row, col) 将 row 和 col 的对应元素配对,例如:
    row = [1, 2, 3]
    col = [4, 5, 6]
    zip(row, col)  # 生成 (1, 4), (2, 5), (3, 6)
  • x * y for x, y in zip(row, col) 计算每对元素的乘积(即 1 * 42 * 53 * 6)。
  • sum(...) 将这些乘积相加,得到点积(即 1 * 4 + 2 * 5 + 3 * 6 = 32)。
4. % MOD:取模运算
  • 对点积结果取模(% MOD),确保结果在 [0, MOD-1] 范围内。
5. 整体逻辑

这段代码的作用是:

  • 遍历矩阵 b 的每一列 col
  • 计算矩阵 a 的某一行 row 与 col 的点积。
  • 对点积结果取模 MOD
  • 将所有结果组成列表返回。
row = [1, 2, 3]
b = [[4, 5, 6],[7, 8, 9]]
MOD = 10

计算过程:

  1. zip(*b) 得到 [4, 7][5, 8][6, 9](即 b 的列)。
  2. 对每一列 col
    • col = [4, 7]sum(1 * 4 + 2 * 7) = 1818 % 10 = 8
    • col = [5, 8]sum(1 * 5 + 2 * 8) = 2121 % 10 = 1
    • col = [6, 9]sum(1 * 6 + 2 * 9) = 2424 % 10 = 4
  3. 最终结果:[8, 1, 4]

这段代码实现了:

  1. 矩阵 a 的一行 row 与矩阵 b 的每一列的点积。
  2. 对每个点积结果取模 MOD
  3. 返回结果列表。

常用于矩阵乘法或线性代数运算中。

相关文章:

  • 微服务商城(1)开篇、服务划分
  • LLM(大语言模型)部署加速方法——PagedAttention
  • 【第六课】ESP32-S3 BLE 与 WiFi 一体化通信示例
  • 从0开始学linux韦东山教程第三章问题小结(4)
  • 内存分配器ptmalloc2、tcmalloc、jemalloc,结构设计、内存分配过程详解
  • fiftyone-数据库配置和config与app_config配置文件
  • 耐压击穿测试的原理、流程及应用领域
  • SymPy | 如何提取指定项的系数
  • LeetCode 820 单词的压缩编码题解
  • 笔记本电脑打开网页很慢,一查ip地址网段不对怎么处理
  • 数学建模初等模型应用
  • 影刀RPA网页自动化总结
  • TCP 三次握手建立连接详解
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-B. 错误代码与解决方案
  • AWS技术助力企业满足GDPR合规要求
  • MATLAB 中常用的微分函数介绍
  • 武汉科技大学人工智能与演化计算实验室许志伟课题组参加2025中国膜计算论坛
  • 网络运维过程中的常用命令
  • 安装npm:npm未随Node.js一起安装
  • 深度学习基础知识
  • 视频|王弘治:王太后,“先天宫斗圣体”?
  • 河南信阳拟发文严控预售许可条件:新出让土地开发的商品房一律现房销售
  • 北京“准80后”干部兰天跨省份调任新疆生态环境厅副厅长
  • 哈佛新论文揭示 Transformer 模型与人脑“同步纠结”全过程!AI也会犹豫、反悔?
  • 2024年度全国秋粮收购达3.45亿吨
  • 这些网红果蔬正在收割你的钱包,营养师:吃了个寂寞