当前位置:网站首页>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;
}
};
边栏推荐
- After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?
- What is load balancing? How does DNS achieve load balancing?
- QT establish signal slots between different classes and transfer parameters
- Sqlite数据库存储目录结构邻接表的实现2-目录树的构建
- 炒股开户怎么最方便,手机上开户安全吗
- Lecture 1: the entry node of the link in the linked list
- v-for遍历元素样式失效
- 【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出
- paddle入门-使用LeNet在MNIST实现图像分类方法二
- Langchao Yunxi distributed database tracing (II) -- source code analysis
猜你喜欢

Lecture 1: the entry node of the link in the linked list

Service mesh introduction, istio overview

ThinkPHP kernel work order system source code commercial open source version multi user + multi customer service + SMS + email notification

paddle一个由三个卷积层组成的网络完成cifar10数据集的图像分类任务

【测试面试题】页面很卡的原因分析及解决方案

After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?

玩转Sonar

Cve-2022-28346: Django SQL injection vulnerability

NVIDIA Jetson测试安装yolox过程记录

The underlying principles and templates of new and delete
随机推荐
深潜Kotlin协程(二十三 完结篇):SharedFlow 和 StateFlow
Thinkphp内核工单系统源码商业开源版 多用户+多客服+短信+邮件通知
5g NR system messages
Cause analysis and solution of too laggy page of [test interview questions]
Cancel the down arrow of the default style of select and set the default word of select
浪潮云溪分布式数据库 Tracing(二)—— 源码解析
基于人脸识别实现课堂抬头率检测
tourist的NTT模板
接口测试进阶接口脚本使用—apipost(预/后执行脚本)
Deep dive kotlin synergy (XXII): flow treatment
新库上线 | CnOpenData中华老字号企业名录
Experience of autumn recruitment in 22 years
新库上线 | 中国记者信息数据
攻防演练中沙盘推演的4个阶段
韦东山第三期课程内容概要
Basic principle and usage of dynamic library, -fpic option context
Langchao Yunxi distributed database tracing (II) -- source code analysis
What has happened from server to cloud hosting?
语义分割模型库segmentation_models_pytorch的详细使用介绍
手机上炒股安全么?