当前位置:网站首页>【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!
边栏推荐
- ATSs: automatically select samples to eliminate the difference between anchor based and anchor free object detection methods
- 药品溯源夯实安全大堤
- TensorFlow团队:我们没被抛弃
- RT-Thread Env 工具介绍(学习笔记)
- [300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (III)
- Pocket network supports moonbeam and Moonriver RPC layers
- 2022 Moonriver全球黑客松优胜项目名单
- 张驰咨询:锂电池导入六西格玛咨询降低电池容量衰减
- 采集数据工具推荐,以及采集数据列表详细图解流程
- Description | Huawei cloud store "commodity recommendation list"
猜你喜欢

Reading notes of top performance version 2 (V) -- file system monitoring

S32K1xx 微控制器的硬件設計指南

马来西亚《星报》:在WTO MC12 孙宇晨仍在坚持数字经济梦想

For the sustainable development of software testing, we must learn to knock code?

Crypto Daily:孙宇晨在MC12上倡议用数字化技术解决全球问题

What time do you get off work?!!!

工厂高精度定位管理系统,数字化安全生产管理

AVL 平衡二叉搜索树

2022 Moonriver全球黑客松优胜项目名单

并发编程系列之什么是ForkJoin框架?
随机推荐
三星率先投产3nm芯片,上海应届硕士生可直接落户,南开成立芯片科学中心,今日更多大新闻在此...
STM32F1与STM32CubeIDE编程实例-PWM驱动蜂鸣器生产旋律
【STM32-USB-MSC问题求助】STM32F411CEU6 (WeAct)+w25q64+USB-MSC Flash用SPI2 读出容量只有520KB
远程办公经验?来一场自问自答的介绍吧~ | 社区征文
MySQL的零拷贝技术
ABAP-屏幕切换时,刷新上一个屏幕
微信小程序03-文字一左一右显示,行内块元素居中
智慧党建: 穿越时空的信仰 | 7·1 献礼
综述 | 激光与视觉融合SLAM
S32K1xx 微控制器的硬件設計指南
The newly born robot dog can walk by himself after rolling for an hour. The latest achievement of Wu Enda's eldest disciple
Phpcms background upload picture button cannot be clicked
做空蔚来的灰熊,以“碰瓷”中概股为生?
GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速
Task.Run(), Task.Factory.StartNew() 和 New Task() 的行为不一致分析
[target tracking] |stark
HR面试:最常见的面试问题和技巧性答复
Microservice tracking SQL (support Gorm query tracking under isto control)
[cloud trend] new wind direction in June! Cloud store hot list announced
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