当前位置:网站首页>【LeetCode】43. String multiplication
【LeetCode】43. String multiplication
2022-07-01 15:50:00 【Uaena_ An】
43. String multiplication
🧸 Reading questions
Give two strings , Multiply to get a string , This problem can't be solved by plastic surgery , Because the later test examples will be very large , plastic , Long plastic surgery can't be installed !
🧸 Ideas
To multiply by bits , Save in string , Then add the strings obtained by the product , The final result is stored in the string in turn ,
🧸 Code
class Solution {
public:
string addStrings(string& count, string& sum)
{
//end1,end2 Add from the tail of two numbers ,carry Record carry
int end1 = count.size() - 1, end2 = sum.size() - 1, carry = 0;
string ret;// Record the sum of two numbers added
while (end1 >= 0 || end2 >= 0)
{
// If end1 Greater than 0 shows count There are also a number , be x1 take end1 The value of a , Otherwise take 0
int x1 = 0;
if (end1 >= 0)
{
x1 = count[end1] - '0';
--end1;
}
int x2 = 0;
if (end2 >= 0)
{
x2 = sum[end2] - '0';
--end2;
}
//add Record the sum of two numbers added , Plus carry , The first carry is 0
int add = x1 + x2 + carry;
// If add Greater than 9, It indicates that carry is required , also add To subtract 10
// And enter the position 1 , Otherwise, enter the position 0, Otherwise, the carry will retain the result of the last carry , There will be errors
if (add > 9)
{
carry = 1;
add -= 10;
}
else {
carry = 0;
}
// Insert the remainder of the carry character at the end of ret in , Turn it over later , To improve efficiency
ret += add;
}
// Come here , It means that both numbers have been added , But there is also carry 1 position , Insert the tail
if (carry != 0)
{
ret += carry;
carry = 0;
}
// Flip
reverse(ret.begin(), ret.end());
// Convert to numeric characters
for (auto& e : ret)
{
e += '0';
}
return ret;
}
string multiply(string num1, string num2) {
if (num1 == "0" || num2 == "0")
{
return "0";
}
string count = "0";// Record the sum
int end1 = num1.size() - 1, end2 = num2.size() - 1;
// Multiply by place ,num2 every * num1 All bits
for (int i = end2; i >= 0; --i)
{
string sum;// Record product
int carry = 0;// Record carry
// When j = i when , explain j Here you are . Is the last multiplication , Unwanted +0
// When j-- after j It's on the tenth , Multiply the number in the tens by other numbers , Directly in the back +1 individual 0, And so on
for (int j = end2; j > i; --j)
{
sum.push_back(0);
}
//i Control is num2 Flashback every bit of traversal
int x2 = num2[i] - '0';
// The following is to use x2 * num1 every
for (int j = end1; j >= 0; --j)
{
int x1 = num1[j] - '0';
int ret = x1 * x2 + carry;// Multiply two numbers + carry
sum += ret % 10;//sum Save a bit , Tail insertion
carry = ret / 10;//carry Save ten
}
// When two numbers are multiplied Rounding and numbers , You need to Carry tail interpolation
while (carry != 0) {
sum += carry % 10;
carry /= 10;
}
// After tail insertion Flip strings
reverse(sum.begin(), sum.end());
// Convert a string into a numeric string
for (auto &e : sum) {
e += '0';
}
count = addStrings(count, sum);
}
return count;
}
};
🧸 Decoding code
The interpretation code has been written in the code comments !
make blind and disorderly conjectures
This problem is done 2 Hours , Read the explanation of the question , Understand the solution step by step , Then I tried to write , Half understood , I will do it again several times in the future
come on. I wish you get what you want offer!
边栏推荐
- 【目标跟踪】|模板更新 时间上下文信息(UpdateNet)《Learning the Model Update for Siamese Trackers》
- 摩根大通期货开户安全吗?摩根大通期货公司开户方法是什么?
- Automatic, intelligent and visual! Deeply convinced of the eight designs behind sslo scheme
- Go语学习笔记 - gorm使用 - 表增删改查 | Web框架Gin(八)
- 异常检测中的浅层模型与深度学习模型综述(A Unifying Review of Deep and Shallow Anomaly Detection)
- Preorder, inorder, follow-up of binary tree (non recursive version)
- 关于用 ABAP 代码手动触发 SAP CRM organization Model 自动决定的研究
- 做空蔚来的灰熊,以“碰瓷”中概股为生?
- Overview | slam of laser and vision fusion
- SAP S/4HANA: 一条代码线,许多种选择
猜你喜欢
Hardware development notes (9): basic process of hardware development, making a USB to RS232 module (8): create asm1117-3.3v package library and associate principle graphic devices
【目标跟踪】|STARK
Hardware design guide for s32k1xx microcontroller
Wechat applet 02 - Implementation of rotation map and picture click jump
硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件
For the sustainable development of software testing, we must learn to knock code?
Phpcms background upload picture button cannot be clicked
[target tracking] |stark
"Qt+pcl Chapter 6" point cloud registration ICP Series 6
基于PHP的轻量企业销售管理系统
随机推荐
【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(三)
微信小程序02-轮播图实现与图片点击跳转
综述 | 激光与视觉融合SLAM
Create employee data in SAP s/4hana by importing CSV
AVL 平衡二叉搜索树
[one day learning awk] function and user-defined function
Wechat applet 01 bottom navigation bar settings
[pyGame practice] do you think it's magical? Pac Man + cutting fruit combine to create a new game you haven't played! (source code attached)
远程办公经验?来一场自问自答的介绍吧~ | 社区征文
Description | Huawei cloud store "commodity recommendation list"
Returning to the top of the list, the ID is still weak
Implementation of deploying redis sentry in k8s
跨平台应用开发进阶(二十四) :uni-app实现文件下载并保存
STM32ADC模拟/数字转换详解
u本位合约和币本位合约有区别,u本位合约会爆仓吗
STM32F4-TFT-SPI时序逻辑分析仪调试记录
采集数据工具推荐,以及采集数据列表详细图解流程
【STM32学习】 基于STM32 USB存储设备的w25qxx自动判断容量检测
Go语学习笔记 - gorm使用 - 表增删改查 | Web框架Gin(八)
Pocket network supports moonbeam and Moonriver RPC layers