​LeetCode解法汇总43. 字符串相乘

news2024/12/22 6:24:57

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

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

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

示例 1:

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

示例 2:

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

提示:

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

解题思路:

* 解题思路:

* 我们就按照乘法的定义来,把num1和num2转换成两个int类型的数组v1和v2。

* 然后用v2的每一位乘以v1数组,得到一个新的数组。比如v1是[1,2,3],v2的位置上的数字位2,得到的结果就是[2,4,6]。

* 然后我们可以得到多个这样的数组,求这些数组的和即可。注意的时,后面的数组,前面要插入若干个0.

* 比如200和[1,2,3],前面就需要插入两个0.

 

代码:

class Solution43
{
public:
    vector<int> multiplyItem(vector<int> v1, int value)
    {
        vector<int> result;
        int carryValue = 0;
        for (int i : v1)
        {
            int newValue = value * i + carryValue;
            carryValue = newValue / 10;
            result.push_back(newValue % 10);
        }
        if (carryValue > 0)
        {
            result.push_back(carryValue);
        }
        return result;
    }

    /**
     * 两个list合并
     */
    vector<int> merge(vector<int> oldList, int startIndex, vector<int> newList)
    {
        for (int i = 0; i < startIndex; i++)
        {
            newList.insert(newList.begin(), 0);
        }
        int index = 0;
        int carry = 0;
        vector<int> list;
        while (index < oldList.size() || index < newList.size() || carry > 0)
        {
            int oldValue = 0;
            int newValue = 0;
            if (index < oldList.size())
            {
                oldValue = oldList[index];
            }
            if (index < newList.size())
            {
                newValue = newList[index];
            }
            int value = oldValue + newValue + carry;
            carry = value / 10;
            list.push_back(value % 10);
            index++;
        }
        return list;
    }

    string multiply(string num1, string num2)
    {
        vector<int> v1;
        vector<int> v2;
        for (char c : num1)
        {
            v1.insert(v1.begin(), c - '0');
        }
        for (char c : num2)
        {
            v2.insert(v2.begin(), c - '0');
        }
        vector<int> result;
        int index = 0;
        int leftStart = 0;
        for (int i = 0; i < v2.size(); i++)
        {
            vector<int> newList = multiplyItem(v1, v2[i]);
            result = merge(result, i, newList);
        }
        string s;
        bool isStart = false;
        for (int i = 0; i < result.size(); i++)
        {
            s.insert(0, to_string(result[i]));
        }
        string ss;
        for (char c : s)
        {
            if (ss.size() == 0 && c == '0')
            {
                continue;
            }
            ss.push_back(c);
        }
        return ss.size() == 0 ? "0" : ss;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/894061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用ChatGPT创作一个小说式的虚构的世界

世界构建也许是小说写作中最重要的一环&#xff0c;但也可能非常耗时。让ChatGPT加快这一过程吧。 写小说最棒的一点就是有机会从零开始创造一个新世界。你可以创造超凡脱俗的景观&#xff0c;赋予人物魔法。神话故事可以存在于你小说中的现实世界&#xff0c;而传统可以帮助你…

gazebo仿真ros2两轮差速小车没有控制的情况下缓慢移动后退

最近在做一款2轮差速的机器人小车&#xff0c;在做gazebo仿真的时候&#xff0c;发现小车一直在缓慢的后退&#xff0c;一边后退一边缓慢拐弯。 环境&#xff1a;ros2 foxy gazebo-11 小车xacro模型代码 <?xml version"1.0"?> <robot name"jtb…

华为OD机试 - 查找接口成功率最优时间段 - 回溯(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

【图书推荐 | 测试】—《测试设计思想》

前言 随着科技的不断发展&#xff0c;互联网的不断进步&#xff0c;日益出现了一种趋势&#xff1a;测试设计将成为一种跨领域的综合性工作&#xff0c;测试者将成为一种跨领域的通用型人才。由此清华大学出版社推出了一本名为《测试设计思想》的书籍&#xff0c;由知名专家周…

分析Flink,源和算子并行度不一致时,运行一段时间后,看似不再继续消费的问题,提供解决思路。

文章目录 背景分析 问题来了比较一开始的情况解决方式 背景 之前有分析过一次类似问题&#xff0c;最终结论是在keyby之后&#xff0c;其中有一个key数量特别庞大&#xff0c;导致对应的subtask压力过大&#xff0c;进而使得整个job不再继续运作。在这个问题解决之后&#xff…

数据分析15——office中的Excel基础技术汇总

0、前言&#xff1a; 这部分总结就是总结每个基础技术的定义&#xff0c;在了解基础技术名称和定义后&#xff0c;方便对相关技术进行检索学习。笔记不会详细到所有操作都说明&#xff0c;但会把基础操作的名称及作用说明&#xff0c;可自行检索。本文对于大部分读者有以下作用…

火山引擎DataLeap:助力PICO落地数据流程规范,提升开发效率

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 作为目前中国市场领跑的头部XR品牌之一&#xff0c;字节跳动旗下的PICO已经拥有了超百万客户。 过去一年&#xff0c;PICO在XR场景中不断建设和发力&#xff0c;为运…

更好的 3D 网格,从重建到生成式 AI

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 这些生成的 3D 模型通常提取为标准三角形网格。网格表示提供了许多好处&#xff0c;包括支持现有软件包、高级硬件加速和支持物理仿真。但是&#xff0c;并非所有网格都是平等的&#xff0c;这些优势只…

在南非发现地球上最古老冰川的证据

古老的冰川暗示着太古代地球在某些方面可能与我们所处的时代相似。 29 亿年前的地球可能有像阿根廷南部冰川国家公园的佩里托莫雷诺冰川这样的冰川。图片来源&#xff1a; Martin St-Amant/维基百科 《地球化学展望快报》上发表的一项 新研究报告称&#xff0c;早在 30 亿年前…

离心机使用操作说明(记录备忘)

关于离心机的使用步骤做一简单记录 1.配准 2.装载&#xff08;对称性放置&#xff09; 3.确认&#xff08;装载完毕之后确认&#xff0c;轻轻转动&#xff09; 4.盖锅盖 5.关闭主盖 6.设置参数 7.运行 开始加速之后 转速会持续增加至设定值&#xff0c;离心结束后&#xff0c…

Python functools module 的介绍与应用

Python functools module 的介绍与应用 functools module lru_cache from functools import lru_cache import timelru_cache(maxsizeNone) # 设置缓存大小为无限制 def my_function(x):for i in range(1000):x xfor j in range(100):x xreturn x# 第一次调用函数&#xff…

概念解析 | 群像素激光雷达

群像素激光雷达技术解析 注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:群像素激光雷达技术。 1. 背景介绍 激光雷达作为一种主动式激光探测技术,通过发射脉冲激光并接收其反射回波信号,来获取目标距离和其他信息,在军事侦察…

收支明细高效管理,轻松查看和统计时间段内的开销收支明细!

亲爱的用户们&#xff0c;您是否经常需要查看某一时间段内的所有开销和收支明细&#xff0c;并进行自动统计和分析&#xff1f;现在&#xff0c;我们为您带来一款智能财务管家&#xff0c;让您轻松管理财务&#xff01; 首先&#xff0c;我们要进入晨曦记账本主页面&#xff0…

【c语言】通讯录(动态版+文件+背景音乐)含源码

开饭了&#xff0c;之前写的通讯录&#xff0c;是否会有人觉得申请1000人的空间是不是有点用不上呀&#xff0c;怎么才能做到要多少申请多少个呢&#xff1f;&#xff1f;我们学完动态内存管理&#xff0c;和文件的相关操作&#xff0c;终于可以继续完善我们的通讯录了 船新版本…

Python异常处理:优雅应对错误与异常

文章目录 &#x1f340;引言&#x1f340;异常的概念&#x1f340; try-except块&#x1f340;多个except块&#x1f340;else块&#x1f340;finally块&#x1f340;异常类型&#x1f340;抛出异常&#x1f340;异常处理的最佳实践&#x1f340;异常处理的现实应用&#x1f34…

设计模式之代理模式(Proxy)的C++实现

1、代理模式的提出 在组件的开发过程中&#xff0c;有些对象由于某种原因&#xff08;比如对象创建的开销很大&#xff0c;或者对象的一些操作需要做安全控制&#xff0c;或者需要进程外的访问等&#xff09;&#xff0c;会使Client使用者在操作这类对象时可能会存在问题&…

k8s ingress

一、浅谈ingress &#xff08;ingress 是与service配合使用的&#xff09; Ingress能把Service&#xff08;Kubernetes的服务&#xff09;配置成外网能够访问的URL&#xff0c;流量负载均衡&#xff0c;及SSL&#xff0c;并提供域名访问的虚拟主机等&#xff0c;客户通过访问UR…

【C++学习手札】一文带你认识C++虚函数(内层剖析)

食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f340;本文前置知识&#xff1a; C初识继承 ♈️今日夜电波&#xff1a;No title —REOL 1:02 ━━━━━━️&#x1f49f;──────── 4:03 …

无涯教程-Perl - use函数

描述 此函数将MODULE导出的所有功能(或仅LIST引用的功能)导入当前包的名称空间。有效等效于- BEGIN { require "Module.pm"; Module->import(); }也用于在当前脚本上强加编译器指令(编译指示),尽管从本质上讲它们只是模块。 请注意,use语句在编译时进行判断。在…