leetcode 43. 字符串相乘

题目

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

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

原题链接:https://leetcode.cn/problems/multiply-strings/description/

示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”

思路

把乘法的过程,进行拆解。
如 123 x 456,拆成 123 x 6 x 10 ^0 + 123 x 5 x 10^1 + 123 x 4 x 10^2。
这里除了处理乘法项的相乘过程之外,还要处理每一个乘法项的相加过程。
即包括 相乘过程相加过程
为了避免溢出,这里每一个过程都得处理成字符串的形式。

  • 复杂度分析
    • 时间复杂度 O(mn)。乘法部分两个for循环是 m * n。
    • 空间复杂度 O(m+n)。空间复杂度取决于两个数字的长度。

代码

class Solution {
public:string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0") return "0";string result = "0";int n = num2.size(), m = num1.size();for (int i = n - 1; i >= 0; i--) {string cur;int add = 0;int y = num2[i] - '0';for (int j = m - 1; j >= 0; j--) {int x = num1[j] - '0';int res = x * y + add;char temp = res % 10 + '0';cur = temp + cur;add = res / 10;}if (add > 0) {char temp = add + '0';cur = temp + cur;}for (int k = n - i - 1; k > 0; k--) {cur = cur + '0';}result = add_string(result, cur);}return result;}string add_string(string& num1, string& num2) {int i = num1.size() - 1;int j = num2. size() - 1;int add = 0;string result = "";while (i >= 0 || j >= 0 || add > 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int res = x + y + add;char temp = res % 10 + '0';result = temp + result;add = res / 10;i--;j--;}return result;}
};

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

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

相关文章

测试开发面经分享,面试七天速成

1. get、post、put、delete的区别 a. get请求: i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的,即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存,可以被收藏为书签。 iv. 对于敏感数据不…

高考后的家庭移民新选择

随着高考的落幕,您是否在思考未来的更多可能性?移民,作为一种生活选择,为许多家庭提供了一个全新的生活和教育环境。我们理解,每个家庭都希望为自己的孩子提供最好的未来。 移民国家通常拥有多元和包容的教育体系&…

代理IP使用api接口

代理IP使用API接口,通常是指通过API接口获取代理IP地址,并将其应用于爬虫、数据采集、反爬虫等场景中,以提高数据采集效率和保护数据采集安全。 一般来说,代理IP提供商会提供API接口文档和SDK供开发者使用。你需要先注册并登录代…

嵌入式软件单元/集成测试工具TESSY功能、特点介绍

在当前的智能物联网时代,嵌入式软件测试越来越受到关注。 嵌入式软件的特点 首先,我们来快速了解一下嵌入式软件自身的特点。 嵌入式软件具有实时性、内存空间有限、I/O通道少,而且要求功耗低、高可靠性,对成本也比较敏感&…

四川蔚澜时代电子商务有限公司抖音电商服务怎么样?

随着数字经济的蓬勃发展,电商行业已成为推动经济增长的重要引擎。在这个充满变革与机遇的时代,四川蔚澜时代电子商务有限公司凭借对抖音电商的深入理解和专业服务,迅速崛起为行业的佼佼者,引领着潮流营销的新风尚。 四川蔚澜时代…

ARM32开发--串口库封装(初级)

知不足而奋进望远山而前行 目录 文章目录 前言 目标 内容 开发流程 文件目录创建 分组创建 接口定义 完整代码 总结 前言 在嵌入式软件开发中,封装抽取流程和抽取封装策略是非常重要的技术,能够提高代码的复用性和可维护性。本文将介绍如何在文…

这可能是最清晰易懂的 G1 GC 资料

滑动验证页面 概述 G1 (Garbage-First) 于JDK 6u14版本发布,JDK 7u4版本发行时被正式推出,在JDK9时已经成了默认的垃圾回收器,算是CMS回收器的替代 方案(CMS在JDK9以后已经废弃) G1是一款分代的 (generational)&a…

@并行计算和分布式计算解决方案

并行计算和分布式计算解决方案 文章目录 为什么需要并行计算为什么需要分布式计算常见的解决方案有哪些 为什么需要并行计算 需要最大化利用计算机资源,加速计算。 为什么需要分布式计算 单机资源不足或者单机加速不达标,需要联合多台计算机&#xff…

如何使用C++ STL标准模板库中的算法函数(附源码)

目录 1、概述 2、调用sort函数对列表元素进行排序 3、调用count_if查找满足条件的元素个数 4、调用find_if函数找到目标元素的信息 5、调用remove_copy_if函数搜索满足条件的多个元素 6、总结 VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.…

LeetCode刷题之HOT100之子集

2024/6/11 周二,闷热,很热。两天没有做题了,前天去附近一景点《十八重溪》游玩,去了才知道暂停开放,只能在附近转转了,瀑布是看不到了。昨天在宿舍呆了一天,今天早上起来就来了实验室。补三张图…

端午节,来看看这本应景的“龙舟书”吧!

大家端午安康呀图片~~ 端午节,不仅要吃粽子,还要看龙舟!图片 所以,今天就和大家分享一本“龙舟书”——《精进ChatGPT:高效应用实战88例》! 不仅和今天的端午节应景,还和当今的AI时代很配图片…

AI Agent 热门的10篇论文

人工智能代理领域广阔,涵盖广泛的主题,包括多代理系统、强化学习、上下文感知系统以及将大型语言模型 (LLMs) 集成到基于代理的系统中。以下是 arXiv 的一些顶级论文,涵盖了人工智能代理的各个方面: A Framework For Intelligent Multi Agent System Based Neural Network …

Python 基础语法详解(四)

Python 基础语法详解(四) Python 条件语句最简单的 if 语句基本的 if 语句实战: 复杂 if 语句实战: 看一看 elif 的好处题目:代码实现: 三元表达式格式为:实操: Python 条件语句 在…

Windows 托盘图标实现类封装及使用(附源码)

在系统桌面右下角的托盘区域,创建一个托盘图标,已经是很多软件的标配了,特别是IM即时通讯软件,要在托盘图标上显示来消息时的闪动头像。 其实托盘图标创建很简单,使用起来也比较方便,主要是调用Shell_NotifyIcon API函数,传入不同参数表示对应的操作: 1)NIM_AD…

synchronized 的底层实现

用户态与内核态 JDK 早期,synchronized 叫做重量级锁, 因为申请锁资源必须通过 kernel(指大多数操作系统的核心部分),系统调用。 ;hello.asm ;write(int fd, const void *buffer, size_t nbytes)section datamsg db …

数据结构(用 JS 实现栈和队列【三种方式】)

栈 先进后出 JS 实现栈 栈 : 用数组实现入栈 push ---- 时间复杂度 O(1)出栈 pop ---- 时间复杂度 O(1) let stack [];// 入栈 stack.push("a"); stack.push("b");console.log(stack);// 出栈 -- 先进后出 -- b 出栈 stack.pop();console.log(stack);队…

安装golang

官网:All releases - The Go Programming Language (google.cn) 下载对应的版本安装即可

【Python】 如何使用Pandas DataFrame的‘in‘和‘not in‘进行筛选,就像在SQL中一样

基本原理 在Python的Pandas库中,DataFrame是一个强大的数据结构,用于处理表格数据。Pandas提供了多种方法来筛选DataFrame中的数据,其中使用in和not in是模仿SQL查询中IN和NOT IN操作的一种方式。在SQL中,IN用于筛选出在某个列表…

线性代数|机器学习-P9向量和矩阵范数

文章目录 1. 向量范数2. 对称矩阵S的v范数3. 最小二乘法4. 矩阵范数 1. 向量范数 范数存在的意义是为了实现比较距离,比如,在一维实数集合中,我们随便取两个点4和9,我们知道9比4大,但是到了二维实数空间中&#xff0c…