当前位置: 首页 > 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)。

http://www.xdnf.cn/news/509347.html

相关文章:

  • Flink并行度与分区机制深度解析
  • 计算机的基本组成与性能
  • 论文阅读(四):Agglomerative Transformer for Human-Object Interaction Detection
  • 【QGIS二次开发】地图编辑-04
  • 泰国SAP ERP实施如何应对挑战?工博科技赋能中企出海EEC战略
  • 《云端共生体:Flutter与AR Cloud如何改写社交交互规则》
  • Spring Boot 与 RabbitMQ 的深度集成实践(一)
  • Uniapp 与 Uniapp X 对比:新手上手指南及迁移到 Uniapp X 的注意事项
  • 学习黑客Active Directory 入门指南(五)
  • 嵌入式学习的第二十二天-数据结构-栈+队列
  • Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值
  • c++总结-03-move
  • 系统架构设计师考前冲刺笔记-第1章-系统工程与信息系统基础
  • DeepSeek系列大语言模型推理优化技术深度解析
  • (10)python开发经验
  • SparkSQL基本操作
  • Git多人协作
  • 10.7 LangChain v0.3架构大升级:模块化设计+多阶段混合检索,开发效率飙升3倍!
  • 【甲方安全建设】拉取镜像执行漏洞扫描教程
  • el-dialog鼠标在遮罩层松开会意外关闭,教程图文并茂
  • 限流算法 + dfa敏感词过滤算法
  • ubuntu的虚拟机上的网络图标没有了
  • 学习!FastAPI
  • Ubuntu---omg又出bug了
  • Spring Boot 与 RabbitMQ 的深度集成实践(二)
  • Web开发-JavaEE应用SpringBoot栈SnakeYaml反序列化链JARWAR构建打包
  • 5.18本日总结
  • LeetCode 35. 搜索插入位置:二分查找的边界条件深度解析
  • nginx概念及使用
  • 分别用 语言模型雏形N-Gram 和 文本表示BoW词袋 来实现文本情绪分类