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

LeetCode 刷题【43. 字符串相乘】

43. 字符串相乘

自己做

解1:矩阵计数

class Solution {
public:string multiply(string num1, string num2) {int len1 = num1.size();int len2 = num2.size();if (num1[0] == '0' || num2[0] == '0')       //结果为0的情况return "0";//存储计算过程的矩阵vector<vector<int>> calculation(len1, vector<int>(len1 + len2, 0));string string_res;    //存放结果//计算for (int i = len1 - 1; i >= 0; i--) {int add = 0;          //进位   for (int j = len2 - 1; j >= 0; j--) {int res = (num1[i] - 48) * (num2[j] - 48) + add;     //当前结果//cout << res << " ";calculation[len1 - 1 - i][i + j + 1] = res % 10;   //余位add = res / 10;                                     //进位}if(add > 0)                                       //进位有多calculation[len1 - 1 - i][i] = add;   //cout << endl;}//// 输出二维向量//cout << "calculation = [" << endl;//for (int i = 0; i < calculation.size(); ++i) {//    cout << "  [";//    for (int j = 0; j < calculation[i].size(); ++j) {//        cout << calculation[i][j];//        if (j != calculation[i].size() - 1) {//            cout << ", ";//        }//    }//    cout << "]" << (i == calculation.size() - 1 ? "" : ",") << endl;//}//cout << "]" << endl;//累加矩阵所有元素int add = 0;          //累加的进位for (int i = len1 + len2 - 1; i >= 0; i--) {int res = 0;          //这一轮累加的结果for (int j = 0; j < len1; j++) res += calculation[j][i];res += add;   //加上进位string_res.insert(string_res.begin(), res % 10 + 48);     //余位存放进结果add = res / 10;                                           //进位更新}if (add > 0)string_res.insert(string_res.begin(), add + 48);     //余位存放进结果//消除前面的零while (string_res[0] == '0')string_res.erase(string_res.begin());return string_res;}
};

解2:优化解1

class Solution {
public:string multiply(string num1, string num2) {int len1 = num1.size();int len2 = num2.size();if (num1[0] == '0' || num2[0] == '0')       //结果为0的情况return "0";string string_res(len1 + len2, '0');    //存放结果,结果最长也只是两者长度的和,不可能更长//计算for (int i = len1 - 1; i >= 0; i--) {int add = 0;          //进位   for (int j = len2 - 1; j >= 0; j--) {int int_res = (num1[i] - 48) * (num2[j] - 48) + (string_res[i + j + 1] - 48) + add;     //当前结果string_res[i + j + 1] = int_res % 10 + 48;                //余位存放进结果add = int_res / 10;                                     //进位}if (add > 0)                                      //进位有多string_res[i] = add + 48;}//消除前面的零while (string_res[0] == '0')string_res.erase(string_res.begin());return string_res;}
};

http://www.dtcms.com/a/334051.html

相关文章:

  • 34 HTB Cat 机器 - 中等难度
  • 完整设计 之 智能合约系统:主题约定、代理协议和智能合约 (临时命名)----PromptPilot (助手)答问之2
  • Three.js三大组件:场景(Scene)、相机(Camera)、渲染器(Renderer)
  • 线性代数之两个宇宙文明关于距离的对话
  • 图像相似度算法汇总及Python实现
  • 01数据结构-关键路径
  • Unity 游戏提升 Android TargetVersion 相关记录
  • Docker小游戏 | 使用Docker部署人生重开模拟器
  • MySQL的三大范式:
  • 机器学习--决策树
  • Rust 语法基础教程
  • sqli-labs通关笔记-第52关 GET数值型order by堆叠注入(手工注入+脚本注入两种方法)
  • Ubuntu 25.04 安装并使用 MySQL 8.4.5 的步骤
  • 使用 npm-run-all2 简化你的 npm 脚本工作流
  • Linux中的restore
  • PHP域名授权系统网站源码/授权管理工单系统/精美UI/附教程
  • 集成电路学习:什么是Haar Cascade Classifier Haar级联分类器
  • Vue 3.5+ Teleport defer 属性详解:解决组件渲染顺序问题的终极方案
  • JavaScript 实用工具方法小全
  • 在STM32F103上进行FreeRTOS移植和配置(源码移植)
  • 【总结型】c语言中的位运算
  • 给AI装上“稳压器”:批归一化如何加速深度学习
  • [Linux] Cockpit管理服务器 软件包管理
  • VScode 使用遇到的问题
  • linux docker neo4j 导出 (windows 导入)
  • Winsows系统去除右键文件显示的快捷列表
  • 微服务架构实战指南:从单体应用到云原生的蜕变之路
  • 头文件包含和前置声明
  • python---包
  • libcurl 中 curl_multi 的演进:从双路并进到 epoll 革命