当前位置:网站首页>letcode43:字符串相乘
letcode43:字符串相乘
2022-07-07 22:58:00 【New Young】
前言:
题目
letcode:https://leetcode.cn/problems/multiply-strings/description/
思路
代码
//思路:
//用每位相乘的结果存放到数组中即可
//且
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)
{
//结果是不可能把数组填满的,这是隐形的说明
//因为每个数组的启始数据头是不同的,所以用begin来开始
int gap = 0;//进位器
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)//结果位数大于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;
}
//数组的个数取决于最短长度的string
int** arr = new int* [min];
//多位数相乘的结果位数不可能大于每位数的数位之和,因此每个数组长度取len1+len2;
for (size_t i = 0; i < min; ++i)
{
arr[i] = new int[len];
memset(arr[i], 0, sizeof(int) * (len));//初始化空间为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;//进位器
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;
}
};
边栏推荐
- Kubernetes Static Pod (静态Pod)
- 从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值
- Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
- 服务器防御DDOS的方法,杭州高防IP段103.219.39.x
- 攻防演练中沙盘推演的4个阶段
- [programming questions] [scratch Level 2] March 2019 garbage classification
- 基于人脸识别实现课堂抬头率检测
- 3 years of experience, can't you get 20K for the interview and test post? Such a hole?
- Four stages of sand table deduction in attack and defense drill
- Vscode software
猜你喜欢
Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
《因果性Causality》教程,哥本哈根大学Jonas Peters讲授
C# 泛型及性能比较
C # generics and performance comparison
Jouer sonar
What if the testing process is not perfect and the development is not active?
NVIDIA Jetson测试安装yolox过程记录
Zhou Hongqi, 52 ans, est - il encore jeune?
Reentrantlock fair lock source code Chapter 0
接口测试要测试什么?
随机推荐
基于人脸识别实现课堂抬头率检测
Development of a horse tourism website (realization of login, registration and exit function)
ABAP ALV LVC模板
Summary of the third course of weidongshan
ABAP ALV LVC template
他们齐聚 2022 ECUG Con,只为「中国技术力量」
The underlying principles and templates of new and delete
3 years of experience, can't you get 20K for the interview and test post? Such a hole?
【GO记录】从零开始GO语言——用GO语言做一个示波器(一)GO语言基础
Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades(KDD20)
Jouer sonar
Where is the big data open source project, one-stop fully automated full life cycle operation and maintenance steward Chengying (background)?
《因果性Causality》教程,哥本哈根大学Jonas Peters讲授
赞!idea 如何单窗口打开多个项目?
Service Mesh的基本模式
什么是负载均衡?DNS如何实现负载均衡?
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
Deep dive kotlin synergy (XXII): flow treatment
【笔记】常见组合滤波电路
"An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points