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

LeetCode--43.字符串相乘

前言:没脸提了,连续断更两天了,我会尽力克制自己的懒惰的

解题思路:

        1.获取信息:

                给定两个字符串形式表示的非负整数,返回这两个非负整数的乘积的字符串形式

                提示信息:字符串只由数字组成

                                  不包含任何前导零,除了单独一个数字0这种情况

        2.分析题目:

                既然要求出它们的乘积,那肯定会有将字符串形式转换为数字形式的过程,

                转换为了数字形式,那么就会用到乘法或者以加法来模拟乘法等方式求出乘积,

                之后还会有将数字形式转换为字符串形式的过程

                我们要设计代码的话,肯定是要根据需求来设计的

                我看了几种方法吧,其实大概中心思路都是一样的,毕竟只是一个乘法嘛

                所以,我用我自己的理解写了一份自己的代码,我的侧重点是防止溢出,你可以品味一下

        3.示例查验:

                略

        4.尝试编写代码:

                (1)暴力法(侧重于防止溢出)

                        思路:我想到由于数字是以字符串形式来展现出来的,所以我们在将它转换为数字形式的时候,难免可能会溢出,万一它是一个很大很大的数,那么我们该怎么办呢?

                        对于一个数,我们可以创建一个数组,将它各个位数上的数字依次存入其中,就从下标为0的位置开始存入,这样不仅各个位数上的数字我们都存入了,我们还可以根据它的下标来判断它的位数是多少

                        现在知道怎么存入一个数了,那么该怎么实现它们的乘法呢?

                        你试着在纸上将两个数分别按每个位数分开来,将它们相乘,按照乘法分配律展开,就会发现,每个位数的数与另一个乘数的每个位数的数相乘,得到的结果,只反映了该位数和一个更高的位数上的数,所以可以利用这个性质来进行乘法,并且储存结果

class Solution {
public:string multiply(string num1, string num2) {if(num1=="0"||num2=="0")return "0";//如果有任意一个数为0,则返回0int m=num1.size();//数字1的位数int n=num2.size();//数字2的位数vector<int>Num1(m,0);//创建数组来存储它们的数字形式vector<int>Num2(n,0);for(int i=m-1;i>=0;i--){//开始取出各个位数上的数字Num1[m-i-1]=num1[i]-'0';}for(int i=n-1;i>=0;i--){Num2[n-i-1]=num2[i]-'0';}vector<int>Num(m+n+1,0);//存储结果的数组for(int i=0;i<m;i++){//开始进行乘法的操作for(int j=0;j<n;j++){int num=Num1[i]*Num2[j];int les=0;for(int k=i+j;num>0||les!=0;k++){Num[k]+=(num%10+les);num/=10;les=0;if(Num[k]>9){les=Num[k]/10;Num[k]%=10;}}}}string res;//结果的字符串形式for(int i=m+n-1;i>=0;i--){//将数字形式转换为字符串形式if(res==""&&Num[i]==0)continue;res+=('0'+Num[i]);}return res;}
};

完了哦,有没有意犹未尽的感觉,如果有的话,就自己动手做做吧

我尽量从今天开始不断更,如果要断更了,我是会说的,不是小哑巴

http://www.xdnf.cn/news/15234.html

相关文章:

  • JVM故障处理与类加载全解析
  • ✨ FastMCP 实战进阶:构建可远程访问的 MCP 工具服务与客户端(Python 深度解析)
  • Elasticsearch混合搜索深度解析(上):问题发现与源码探索
  • 【flutter】flutter网易云信令 + im + 声网rtm从0实现通话视频文字聊天的踩坑
  • 影石(insta360)GO3拇指相机格式化后的恢复方法
  • OpenCV 与深度学习:从图像分类到目标检测技术
  • 如何安装和配置Autoptimize插件以提高WordPress网站访问速度
  • 飞算JavaAI:重塑Java开发的“人机协同“新模式
  • 免费应用分发平台的安全漏洞和防护机制是什么?
  • Jenkins 自动触发执行的配置
  • 飞算JavaAI:重构Java开发的“人机协同”新范式
  • JavaScript VMP (Virtual Machine Protection) 分析与调试
  • 创建显示心电图的组件
  • 前端学习4:小白入门注册表单的制作(包括详细思考CSS、JS实现过程)
  • uniapp语音播报天气预报微信小程序
  • 格密码--数学基础--02基变换、幺模矩阵与 Hermite 标准形
  • 从UI设计到数字孪生实战应用:构建智慧金融的风险评估与预警平台
  • 使用 SSH 连接 GitHub
  • 飞算 JavaAI 深度体验:开启 Java 开发智能化新纪元
  • 速学 RocketMQ
  • 基于定制开发开源AI智能名片与S2B2C商城小程序的旅游日志创新应用研究
  • FPGA实现SDI转LVDS视频发送,基于GTX+OSERDES2原语架构,提供2套工程源码和技术支持
  • Maui劝退:用windows直接真机调试iOS,无须和Mac配对
  • leetcode:518. 零钱兑换 II[完全背包]
  • Python 类型注解实战:`Optional` 与安全数据处理的艺术
  • 静态路由综合实验
  • GitHub敏感信息收集与防御指南
  • 人大金仓下载安装教程总结
  • 时间显示 蓝桥云课Java
  • 安卓应用启动崩溃的问题排查记录