当前位置: 首页 > news >正文

字符串相乘(43)

43. 字符串相乘 - 力扣(LeetCode)

解法:

class Solution {
public:string multiply(string num1, string num2) {string res = "0";for (int i = 0; i < num2.size(); ++i) {string str = multiplyOneNum(num1, num2[num2.size() - 1 - i], i);res = add(res, str);}return res;}private :string add(const string & num1, const string & num2){string res;res.reserve(max(num1.size(), num2.size()) + 1);int idx1 = num1.size() - 1;int idx2 = num2.size() - 1;int carry = 0;while (idx1 >= 0 || idx2 >= 0 || carry > 0) {int num = 0;if (idx1 >= 0) {num += static_cast<int>(num1[idx1--] - '0');}if (idx2 >= 0) {num += static_cast<int>(num2[idx2--] - '0');}if (carry > 0) {num += carry;}carry = num / 10;num = num % 10;res.push_back(static_cast<char>(num + static_cast<int>('0')));}reverse(res.begin(), res.end());res.shrink_to_fit();return res;}string multiplyOneNum(const string & num1, const char & one_num , int times = 0){if (one_num == '0' || num1 == "0") {return "0";}string res;res.reserve(num1.size() + 1 + times);int carry = 0;for (int i = num1.size() - 1; i >= 0; --i) {int num = static_cast<int>(num1[i] - '0') * static_cast<int>(one_num - '0');if (carry > 0) {num += carry;}carry = num / 10;num = num % 10;res.push_back(static_cast<char>(num + static_cast<int>('0')));}if (carry) {res.push_back(static_cast<char>(carry + static_cast<int>('0')));}reverse(res.begin(), res.end());if (times > 0) {res.append(times, '0');}res.shrink_to_fit();return res;}
};

总结:

设num1的长度是m,num2的长度是n,multiplyOneNum函数的时间复杂度是O(m), 由于result的长度是m + n,所以add函数的时间复杂度是O(m+n),外面又一层循环n,所以时间的计算复杂度是O(mn) + O(mn + n2),即O(mn + n2)。无论是 multiplyOneNum函数还是add函数最长使用的字符串长度是m+n,所以空间复杂度是O(m+n)。

相关文章:

  • 程序代码篇---python向http界面发送数据
  • el-dialog鼠标在遮罩层松开会意外关闭,教程图文并茂
  • 【技海登峰】Kafka漫谈系列(十一)SpringBoot整合Kafka之消费者Consumer
  • 【自然语言处理与大模型】向量数据库:Chroma使用指南
  • 医疗信息系统安全防护体系的深度构建与理论实践融合
  • 什么是 Flink Pattern
  • PDF批量合并拆分+加水印转换 编辑 加密 OCR 识别
  • C语言链表的操作
  • Office 中 VBE 的共同特点与区别
  • 【C++】unordered_map与set的模拟实现
  • Atcoder Beginner Contest 406
  • 【基于Spring Boot 的图书购买系统】深度讲解 用户注册的前后端交互,Mapper操作MySQL数据库进行用户持久化
  • 程序代码篇---数据包解析
  • 层次原理图
  • Android开发——原生渲染方案实现 PDF 预览功能
  • Elasticsearch 初步认识
  • C++控制结构详解:if-else、switch、循环(for/while/do-while)
  • MySQL事务的一些奇奇怪怪知识
  • React-Query使用react-testing-library进行测试
  • 【RabbitMQ】 RabbitMQ高级特性(二)
  • wordpress 分类 输出/百度seo效果
  • vue做网站首页/郑州网络推广
  • asp.net 做网站文章是怎么存储的/百度seo排名360
  • 衡阳市建设局网站/手机网站制作教程
  • 本溪网站开发/google关键词规划师
  • 搭建网站的手机软件/百度推广没有效果怎么办