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

Leetcode 43. 字符串相乘

1.题目基本信息

1.1.题目描述

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

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

1.2.题目地址

https://leetcode.cn/problems/multiply-strings/description

2.解题方法

2.1.解题思路

数组+数字

2.2.解题步骤

第一步,临界值处理。当num1或者num2为0时,乘积为0,直接返回

第二步,m位数乘以n位数,最终结果不会超过m+n位数,所以将结果用一个m+n长度的数组arr进行存储。同时num1[i]*num2[j]可以认为是arr[i+j+1]的未进位时的值的组成部分。所以让乘数num1[i]*num2[j]的值加到arr[i+j+1]上

第三步,第二步获取的是未进位的arr数值数组,在这一步,从后往前遍历,将数组中各个位进行进位操作

第四步,将数组各个位进行连接,并删除前面的0项,即为最终数字的字符串

3.解题代码

Python代码

class Solution:# 数组+数字def multiply(self, num1: str, num2: str) -> str:# 第一步,临界值处理。当num1或者num2为0时,乘积为0,直接返回if num1=="0" or num2=="0":return "0"# 第二步,m位数乘以n位数,最终结果不会超过m+n位数,所以将结果用一个m+n长度的数组arr进行存储。同时num1[i]*num2[j]可以认为是arr[i+j+1]的未进位时的值的组成部分。所以让乘数num1[i]*num2[j]的值加到arr[i+j+1]上length1,length2=len(num1),len(num2)arr=[0]*(length1+length2)for i in range(length1-1,-1,-1):x=int(num1[i])for j in range(length2-1,-1,-1):y=int(num2[j])arr[i+j+1]+=x*y# 第三步,第二步获取的是未进位的arr数值数组,在这一步,从后往前遍历,将数组中各个位进行进位操作extra=0for i in range(length1+length2-1,-1,-1):temp=(arr[i]+extra)%10extra=(arr[i]+extra)//10arr[i]=tempindex=0 if arr[0]!=0 else 1# 第四步,将数组各个位进行连接,并删除前面的0项,即为最终数字的字符串result="".join([str(i) for i in arr[index:]])# print(result)return result

C++代码

class Solution {
public:string multiply(string num1, string num2) {if(num1=="0" || num2=="0"){return "0";}int length1=num1.size(),length2=num2.size();vector<int> arr(length1+length2,0);for(int i=length1-1;i>=0;--i){int x=num1.at(i)-'0';for(int j=length2-1;j>=0;--j){int y=num2.at(j)-'0';arr[i+j+1]+=x*y;}}int extra=0;for(int i=length1+length2-1;i>=0;--i){int temp=arr[i]+extra;extra=temp/10;arr[i]=temp%10;}string result;int index=arr[0]==0 ? 1 : 0;while(index<length1+length2){cout << arr[index] << endl;result+=arr[index]+'0';index++;}return result;}
};

4.执行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 两个多边形 贴图
  • 开源 AI 智能名片 S2B2C 商城小程序与正能量融入对社群归属感的影响
  • Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业
  • 飞睿智能实时雷达活体探测传感器模块,智能家居静止检测实时感知人员有无
  • PHP 面向对象编程
  • 揭秘高效编程工具的选择与使用
  • 揭秘“隐形杀手”:谐波对医院电网的隐形危害
  • STMCubeMx——C8T6的串口调试、接收与发送
  • android和ios双端应用性能的测试工具
  • 丹摩智算平台体验:AI开发从未如此简单
  • 免费制作证件照的小程序源码
  • Python | Leetcode Python题解之第435题无重叠区间
  • 初识C#(一)
  • node-rtsp-stream、jsmpeg.min.js实现rtsp视频在web端播放
  • vue3 通过 axios + jsonp 实现根据公网 ip, 查询天气信息
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 2017-08-04 前端日报
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Hibernate最全面试题
  • Java小白进阶笔记(3)-初级面向对象
  • LeetCode29.两数相除 JavaScript
  • Python_网络编程
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 从重复到重用
  • 基于组件的设计工作流与界面抽象
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • No resource identifier found for attribute,RxJava之zip操作符
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Redis 入门到精通(七)-- redis 删除策略
  • #stm32驱动外设模块总结w5500模块
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (12)目标检测_SSD基于pytorch搭建代码
  • (CPU/GPU)粒子继承贴图颜色发射
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Python第六天)文件处理
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (SERIES10)DM逻辑备份还原
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (每日一问)基础知识:堆与栈的区别
  • (一)SpringBoot3---尚硅谷总结
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)setTimeout 和 setInterval 的区别
  • .Net 6.0 处理跨域的方式
  • .NET CLR Hosting 简介
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉