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

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.xdnf.cn/news/18097.html

相关文章:

  • 视觉语言模型(VLA)分类方法体系
  • Kotlin-基础语法练习一
  • 代码随想录算法训练营四十三天|图论part01
  • Ubuntu 25.04 安装并使用 MySQL 8.4.5 的步骤
  • MySQL完整重置密码流程(针对 macOS)
  • AI应用安全 - Prompt注入攻击
  • 深入解析Java代理模式:灵活控制对象访问的核心技术
  • 配置国内加速源后仍然无法拉取镜像
  • STC8单片机驱动I2C屏幕:实现时间、日期与温湿度显示
  • Rust 中 i32 与 *i32 的深度解析
  • 解决zabbix图片中文乱码
  • 46.Sentinel规则持久化
  • 8位量化简介(40)
  • 铨林接纸机学习记录1
  • ramdisk内存虚拟盘(一)——前世今生
  • 按键序列常用示例
  • Mini MAX AI应用矩阵测评报告——基于旗下多款产品的综合体验与行业价值分析
  • 六大主流负载均衡算法
  • 分享一个基于Hadoop的二手房销售签约数据分析与可视化系统,基于Python可视化的二手房销售数据分析平台
  • Oracle按照特定列值排序和C#统计特定列值的所有行
  • p5.js 3D盒子的基础用法
  • 【解决笔记】MyBatis-Plus 中无 selectList 方法
  • RK3588消费级8K VR一体机 是否有坑?
  • ABP vNext+ WebRTC DataChannel 低延迟传感推送
  • 《JMeter核心技术、性能测试与性能分析》 教学大纲及标准
  • JavaScript性能优化30招
  • Nacos-5--Nacos2.x版本的通信原理
  • C#---StopWatch类
  • 【开源大模型和闭源大模型分别有哪些?两者的对比?部署私有化模型的必要性有哪些?】
  • 五、ZooKeeper、Kafka、Hadoop、HBase、Spark、Flink集群化软件的部署