当前位置:网站首页>Letcode43: string multiplication
Letcode43: string multiplication
2022-07-08 00:49:00 【New Young】
Preface :
subject
letcode:https://leetcode.cn/problems/multiply-strings/description/
Ideas
Code
// Ideas :
// Store the result of each multiplication in the array
// And
void reverseString(string& s) {
size_t i = 0;
size_t j = s.size() - 1;
for (; i < j; ++i, --j)
{
std::swap(s[i], s[j]);
}
}
void Sum(int* arr, int begin, const string& num, const char& ch)
{
// As a result, it is impossible to fill the array , This is an invisible explanation
// Because the starting data header of each array is different , So use begin Let's start
int gap = 0;// Carry device
int len = num.size();
int i = 0;
int j = len - 1;
while (i < len && j >= 0)
{
int sum = (num[j] - '0') * (ch - '0') + gap;
gap = sum / 10;
arr[begin - i] = sum % 10;
++i;
--j;
}
if (gap != 0)// The number of result digits is greater than len
{
arr[begin - i] = gap;
++i;
}
}
class Solution {
public:
string multiply(string num1, string num2) {
if ((strcmp(num1.c_str(), "0") == 0)
|| (strcmp(num2.c_str(), "0") == 0))
{
string s = "0";
return s;
}
size_t len1 = num1.size();
size_t len2 = num2.size();
size_t len = len1 + len2;
size_t min = len1;
if (len1 > len2)
{
min = len2;
}
// The number of arrays depends on the shortest length string
int** arr = new int* [min];
// The number of digits of the result of multiplying multiple numbers cannot be greater than the sum of digits of each number , Therefore, the length of each array is len1+len2;
for (size_t i = 0; i < min; ++i)
{
arr[i] = new int[len];
memset(arr[i], 0, sizeof(int) * (len));// The initialization space is 0
}
if (min == len2)
{
for (size_t i = 0; i < min; ++i)
{
Sum(arr[i], len - 1 - i, num1, num2[len2 -1- i]);
}
}
else
{
for (size_t i = 0; i < min; ++i)
{
Sum(arr[i], len - 1 - i, num2, num1[len1 - 1 - i]);
}
}
int gap = 0;// Carry device
int* tmp = new int[len];
memset(tmp, 0, sizeof(int) * (len));
for (int i = len - 1; i >= 0; --i)
{
int sum = gap;
for (int j = 0; j < min; ++j)
{
sum += arr[j][i];
}
gap = sum / 10;
tmp[i] = sum % 10;
}
int i = 0;
string s;
while (i < len)
{
if (tmp[i] != 0)
{
for (int j = i; j < len; ++j)
{
s += tmp[j] + '0';
}
break;
}
++i;
}
return s;
}
};
边栏推荐
- Deep dive kotlin collaboration (the end of 23): sharedflow and stateflow
- 应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设
- 德总理称乌不会获得“北约式”安全保障
- 备库一直有延迟,查看mrp为wait_for_log,重启mrp后为apply_log但过一会又wait_for_log
- Prompt configure: error: required tool not found: libtool solution when configuring and installing crosstool ng tool
- Summary of the third course of weidongshan
- DNS 系列(一):为什么更新了 DNS 记录不生效?
- Experience of autumn recruitment in 22 years
- 基于人脸识别实现课堂抬头率检测
- 5G NR 系统消息
猜你喜欢
jemter分布式
基于卷积神经网络的恶意软件检测方法
RPA云电脑,让RPA开箱即用算力无限?
FOFA-攻防挑战记录
【笔记】常见组合滤波电路
测试流程不完善,又遇到不积极的开发怎么办?
Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
Jouer sonar
浪潮云溪分布式数据库 Tracing(二)—— 源码解析
从服务器到云托管,到底经历了什么?
随机推荐
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
Basic types of 100 questions for basic grammar of Niuke
搭建ADG过程中复制报错 RMAN-03009 ORA-03113
股票开户免费办理佣金最低的券商,手机上开户安全吗
ABAP ALV LVC template
How is it most convenient to open an account for stock speculation? Is it safe to open an account on your mobile phone
新库上线 | CnOpenData中国星级酒店数据
深潜Kotlin协程(二十二):Flow的处理
【转载】解决conda安装pytorch过慢的问题
Leetcode brush questions
Hotel
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出
Installation and configuration of sublime Text3
攻防演练中沙盘推演的4个阶段
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
Thinkphp内核工单系统源码商业开源版 多用户+多客服+短信+邮件通知
5G NR 系统消息
NVIDIA Jetson测试安装yolox过程记录
3年经验,面试测试岗20K都拿不到了吗?这么坑?