当前位置: 首页 > 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.lryc.cn/news/623381.html

相关文章:

  • 安卓11 12系统修改定制化_____修改运营商版本安装特定应用时的默认规则
  • 美国服务器环境下Windows容器工作负载基于指标的自动扩缩
  • 基于 LoRA的广义知识蒸馏(GKD)训练
  • 【总结型】c语言中的位运算
  • Java -- 泛型-自定义泛型
  • 在职老D渗透日记day18:sqli-labs靶场通关(第26关)get报错注入 过滤or和and基础上又过滤了空格和注释符 ‘闭合 手动注入
  • Qt 动态属性(Dynamic Property)详解
  • 牛 CDR3 单抗:抗病毒领域的 “纳米级精准导弹”
  • 系统思考—啤酒游戏经营决策沙盘认证
  • 第二十五天:构造函数/析构函数/拷贝构造
  • SpringBoot 整合 Langchain4j:系统提示词与用户提示词实战详解
  • 小白学习《PCI Express体系结构导读》——第Ⅰ篇第1章PCI总线的基本知识
  • 《A Practical Guide to Building Agents》文档学习
  • Nginx蜘蛛请求智能分流:精准识别爬虫并转发SEO渲染服务
  • 23. CommonJS 和 ES6 Module 区别
  • 第6问 数据分析领域主要的岗位有哪些?
  • autofit.js: 自动调整HTML元素大小的JavaScript库
  • Java设计模式详细解读
  • 安卓四大组件基础题
  • AI搜索:大模型商业落地的“第一束光”,照见了什么?
  • 【数据结构】深入理解单链表与通讯录项目实现
  • aws(学习笔记第五十一课) ECS集中练习(3)
  • MySQL锁机制:悲观锁VS乐观锁详解
  • 初识c语言————宏定义和调用
  • C语言零基础第18讲:自定义类型—结构体
  • 新手向:GitCode疑难问题诊疗
  • C语言:文件操作详解
  • 从 MySQL 5.7 迁移到 8.0:别让 SQL 文件 “坑” 了你
  • 双指针和codetop复习
  • 【LeetCode每日一题】