LeetCode Python - 43.字符串相乘

目录

  • 题目
  • 答案
  • 运行结果


题目

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:

输入: num1 = “2”, num2 = “3”
输出: “6”

示例 2:

输入: num1 = “123”, num2 = “456”
输出: “56088”

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1 和 num2 只能由数字组成。
  • num1 和 num2 都不包含任何前导零,除了数字0本身。

答案

数学乘法模拟
假设 num1 和 num2 的长度分别为 m 和 n,则它们的乘积的长度最多为 m+n。

证明如下:

  • 如果 num1 和 num2 都取最小值,那么它们的乘积为 10 m−1 ×10 n−1 =10 m+n−2 ,长度为 m+n−1。
  • 如果 num1 和 num2 都取最大值,那么它们的乘积为 (10 m −1)×(10 n −1)=10 m+n −10 m −10 n +1,长度为 m+n。

因此,我们可以申请一个长度为 m+n 的数组,用于存储乘积的每一位。

从低位到高位,依次计算乘积的每一位,最后将数组转换为字符串即可。

注意判断最高位是否为 0,如果是,则去掉。

时间复杂度 O(m×n),空间复杂度 O(m+n)。其中 m 和 n 分别为 num1 和 num2 的长度。

class Solution(object):def multiply(self, num1, num2):""":type num1: str:type num2: str:rtype: str"""if num1 == "0" or num2 == "0":return "0"m, n = len(num1), len(num2)arr = [0] * (m + n)for i in range(m - 1, -1, -1):a = int(num1[i])for j in range(n - 1, -1, -1):b = int(num2[j])arr[i + j + 1] += a * bfor i in range(m + n - 1, 0, -1):arr[i - 1] += arr[i] // 10arr[i] %= 10i = 0 if arr[0] else 1return "".join(str(x) for x in arr[i:])

运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/526611.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch学习 day08(最大池化层、非线性激活层、正则化层、循环层、Transformer层、线性层、Dropout层)

最大池化层 最大池化&#xff0c;也叫上采样&#xff0c;是池化核在输入图像上不断移动&#xff0c;并取对应区域中的最大值&#xff0c;目的是&#xff1a;在保留输入特征的同时&#xff0c;减小输入数据量&#xff0c;加快训练。参数设置如下&#xff1a; kernel_size&#…

AI智能应用百科立即落地实操课

该课程旨在教授学员如何将AI智能应用于实际场景。通过深入的案例研究和实操练习&#xff0c;学员将学会应用机器学习、自然语言处理等技术&#xff0c;快速解决现实问题。课程强调实际操作&#xff0c;帮助学员快速运用AI技术解决工作中的挑战。 课程大小&#xff1a;3.3G 课…

【Java探索之旅】数据类型与变量,字面常量,整型变量

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、字面常量二、数据类型三、变量3.1 变量概念3.2 语法格式 四、整型变量4.1 整型变…

reids设计与实现(一)——数据对象

文章目录 1. 前言2. redis 动态字符串2.1. 字符串的数据结构&#xff1a;2.2. 剖析&#xff0c;length&#xff1b;2.3. 剖析&#xff0c;free&#xff1b;2.3. 使用c字符串函数&#xff1b; 3. redis 链表4. 字典5. 跳跃表 1. 前言 reids作为最常用的缓存数据库&#xff0c;深…

【Pytorch】进阶学习:深入解析 sklearn.metrics 中的 classification_report 函数---分类性能评估的利器

【Pytorch】进阶学习&#xff1a;深入解析 sklearn.metrics 中的 classification_report 函数—分类性能评估的利器 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合…

界面开发框架DevExpress XAF v24.1新版预告 - 跨平台应用UI(一)

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 本文中的内容概述了…

js前天、昨天、今天、明天、后天,大后天代码

js 前天、昨天、今天、明天、后天&#xff0c;大后天代码 function GetDateStr(AddDayCount) {var dd new Date();dd.setDate(dd.getDate() AddDayCount); //获取 AddDayCount 天后的日期 var y dd.getFullYear();var m dd.getMonth() 1; //获取当前月份的日期 var d dd…

课时59:流程控制_if条件控制_语法解读

2.2.1 语法解读 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 条件结构能够根据某个特定的条件&#xff0c;结合内置的测试表达式功能&#xff0c;结合测试的结果状态值对于条件进行判断&#xff0c;然后选择执行合适的任务…

JavaScript中的Set和Map:理解与使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Beans模块之工厂模块BeanFactory

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

8核16G服务器多少钱?2024年腾讯云8核16G轻量服务器性能测评

腾讯云8核16G轻量服务器CPU性能如何&#xff1f;18M带宽支持多少人在线&#xff1f;轻量应用服务器具有100%CPU性能&#xff0c;18M带宽下载速度2304KB/秒&#xff0c;折合2.25M/s&#xff0c;系统盘为270GB SSD盘&#xff0c;月流量3500GB&#xff0c;折合每天116.6GB流量&…

mysql的安装启动

下载 2.解压后放在某个目录下&#xff1a; 3.修改系统变量 4.修改配置文件 &#xff08;创建一个ini文件放在解压后的目录下&#xff09; 内容如下 5.初始化mysql 1.用管理员模式下输入&#xff1a; mysqld --initialize --console C:\WINDOWS\system32>mysqld --initia…