LeetCode 43 字符串相乘
题目:
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
说明:
num1和num2的长度小于110。num1和num2只包含数字0-9。num1和num2均不以零开头,除非是数字 0 本身。- 不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
解题思路:
1、乘数的每一位转换成int型,然后与被乘数相乘,取得中间结果temp[i]。 如“12” * “123”,则中间结果为 “36”、“230”、“1200”。(注意这里高位应该相应的增大多个十倍)
2、将1得到的每一个中间结果temp相加。
代码:
class Solution {
public:
string multiply(string num1, string num2) {
if(num1[]-''== || num2[]=='')
return "";
string ans="";
int k=;
int JW=; //1、进位
vector<string> temp(,""); //2、很有必要初始化,因为要从某一个字符串开始填充数字字符
for(int i=num1.size()-; i>=; i--)
{
JW=;
int kk=k;
while(kk--)
temp[i] += ''; //3、乘数的高位乘被乘数时,中间结果应该是多个十倍,如:1*21, 计算1*1时的中间结果为1,而1*2时的中间结果为20
for(int j=num2.size()-; j>=; j--)
{
int u1 = num1[i]-'';
int u2 = num2[j]-'';
if((u1*u2+JW)/ > )
{
temp[i] += ((u1*u2+JW)%+''); //4、解释说明第2条,i初始不是0,一开始从第i个string开始填充
JW = (u1*u2 + JW)/;
}
else
{
temp[i] += ((u1*u2 + JW)+'');
JW = ;
}
}
if(JW)
{
temp[i] += JW+'';
}
k++; //5、对应解释第3条
}
//以下是把中间结果相加
int y=;
int len = temp[].size(); //6、注意这里最长的应该是第0个数组,因为上面的i是倒序的,即乘数的最高位和被乘数相乘后得到的字符串应该最长
JW = ;
for(int i=; i<len; i++)
{
y=;
for(int j=; j<num1.size(); j++) //7、这里j的上限应该是乘数的位数,因为有多少个乘数就有多少个中间结果
{
if( i < temp[j].size()){ //8、一定要注意这里,i的循环上限是最长的string的大小,但不是每一个中间结果都那么长,所以不加判断就会导致y加上了空值,程序出错
y += temp[j][i]-'';
}
}
if((y+JW)/ > )
{
ans += (y+JW)%+'';
JW = (y+JW)/;
}
else
{
ans += (y+JW)+'';
JW = ;
}
}
if(JW)
ans += JW+'';
string res="";
for(int i=ans.size()-; i>=; --i)
res += ans[i];
return res;
}
};
LeetCode 43 字符串相乘的更多相关文章
- LeetCode 43. 字符串相乘(Multiply Strings)
43. 字符串相乘 43. Multiply Strings 题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. ...
- Java实现 LeetCode 43 字符串相乘
43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2& ...
- LeetCode 43. 字符串相乘(Multiply Strings) 大数乘法
题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2" ...
- [LeetCode]415. 字符串相加、43. 字符串相乘
题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...
- leetcode刷题-43字符串相乘
题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 思路 字符串转数字:从字符串第一位开始取,每次取出的值转换为数字 ...
- LeetCodr 43 字符串相乘
思路 用一个数组记录乘积的结果,最后处理进位. 代码 class Solution { public: string multiply(string num1, string num2) { if(n ...
- 代码题(59)— 字符串相加、字符串相乘、打印最大n位数
1.415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 思路:和链表相加类似,求进位. class Solution { public: string addS ...
- Leetcode中字符串总结
本文是个人对LeetCode中字符串类型题目的总结,纯属个人感悟,若有不妥的地方,欢迎指出. 一.有关数字 1.数转换 题Interger to roman和Roman to integer这两题是罗 ...
- LeetCode43(字符串相乘)
题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...
随机推荐
- slf4j/logback: logging日志的配置
slf4j/logback: logging日志的配置 import依赖: import org.slf4j.Logger;import org.slf4j.LoggerFactory;private ...
- Confluence 6 空间标识
每一个 Confluence 空间都有一个 空间标识(space key),这个空间标识是简短并且是唯一的,这个标识被用来构建到空间的 URL 中. 当你创建一个站点空间,Confluence 将会为 ...
- Fiddler简介及web抓包
1.Fiddler界面如下 2.Fiddler开关 界面左下角或点击F12控制Fiddler开关,开关是“Capturing”: 启动之后,Fiddler代理永远是开着的. 3.浏览器代理 ...
- 完整的Django入门指南学习笔记3
前言 在本节课中,我们将深入理解两个基本概念: URLs 和 Forms.在这个过程中,我们还将学习其它很多概念,如创建可重用模板和安装第三方库.同时我们还将编写大量单元测试. 如果你是从这个系列教程 ...
- java 字符串截取的几种方式(转)
众所周知,java提供了很多字符串截取的方式.下面就来看看大致有几种. 1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的 ...
- array_multisort以及php中的排序函数
1. array_multisort(array_column($arr, $key), SORT_DESC, $arr); // 根据二维数组中的某一列对数组进行增序或者降序排列 什么是关联数组呢? ...
- 漏洞复现——ngnix文件解析漏洞
漏洞描述: 上传文件时,在文件名后加%00php,就可以绕过检测成功上传而已文件 影响版本: nginx 0.8.41 – 1.5.6 漏洞分析: 该漏洞原理是非法字符空格和截止符(\0)会导致Ngi ...
- 基于Helm和Operator的K8S应用管理的分享
一.为啥要用helm 对于一些微服务架构来说,会有不同的服务在上面运行,你可能要管理诸如deployment.service.有状态的Statefulset.权限的控制等等.你会发现,部署应用后还会有 ...
- word2013密钥
office 2013是一款功能强大的办公软件目前有两个版本分别为企业版和专业版,是继Microsoft Office 2010 后的新一代套装软件.2012年7月份,微软发布了免费的Office 2 ...
- Java中获得当前静态类的类名
通常在打印日志的时候需要输出类名,普通类可以用this.getClass(),但是静态类没有this,直接写类名耦合度高. 参考了: https://stackoverflow.com/questio ...