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

Leetcode 43 字符串相乘

Leetcode43字符串相乘

    • 题解1(按位计算)

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。

来源:力扣(LeetCode)题目链接
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"

提示:

  • 1 <= num1.length, num2.length <= 200
  • num1num2 只能由数字组成。
  • num1num2都不包含任何前导零,除了数字0本身。

题解1(按位计算)

class Solution {
public:
    string multiply(string num1, string num2) {
        const int s1 = num1.length();
        const int s2 = num2.length();
        // 相乘结果最长s1+s2位
        vector<int> sum = vector(s1 + s2, 0);
        
        for(int i=s1-1; i>=0; i--){
            int k = num1[i] - '0';
            for(int j=s2-1; j>=0; j--){
                int f = num2[j] - '0';
                // key : 按位思想即可发现位置关系(i+j, i+j+1) --- 最重要
                int l = k*f + sum[i+j+1];
                sum[i+j] += l/10;
                sum[i+j+1] = l%10; 
            }
        }

        int i = 0;
        // 除 0
        for(; i < sum.size() && sum[i]==0; i++);
        string str("");
        for(; i<sum.size(); i++){
            str.push_back(sum[i]+'0');
        }
        // 如果结果是0 上面的循环返回的是空str
        return str.size() == 0 ? "0" : str;
    }
};

在这里插入图片描述


http://www.kler.cn/a/37260.html

相关文章:

  • xShell中使用vim编辑时,无法粘贴外来文本
  • [C++] C++特殊类设计 以及 单例模式:设计无法拷贝、只能在堆上创建、只能在栈上创建、不能继承的类, 单例模式以及饿汉与懒汉的场景...
  • VMware ESXi 7.0 U3n macOS Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
  • Qt5.15.2 Webassembly源码裁剪编译
  • 分布式应用之zookeeper集群+消息队列Kafka
  • mmc记录
  • 并发和并行的区别
  • NLog写日志到数据库
  • 网络安全面试题
  • 【探索 Kubernetes|作业管理篇 系列 16】离线业务 Job、CronJob
  • 【NLP】BERT和原理揭示
  • 女孩与花田-InsCode Stable Diffusion 美图活动一期
  • 驾驶证——科目一技巧(三)
  • 文心一言 VS 讯飞星火 VS chatgpt (57)-- 算法导论6.4 1题
  • Es直方图聚合--date_histogram
  • 树莓派4B安装系统 + 花生壳 + docker + portainer管理工具
  • 接口测试 [分享] 自动化测试与持续集成方案--Jmeter 测试接口及性能
  • layui选项卡演示
  • 保障AI时代的图像安全:揭示解决虚假图片危机的三种策略
  • 使用腾讯云轻量应用服务器搭建网站教程