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

news/2024/7/5 2:40:16

目录链接:

力扣编程题-解法汇总_分享+记录-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://lihuaxi.xjx100.cn/news/1457616.html

相关文章

5个方法学会让ChatGPT教你学外语

​作者&#xff1a;楊書宜 过去学习一门语言&#xff0c;可能多半只能通过课堂&#xff0c;后续互联网的不断发展&#xff0c;有了各类APP可以随时随地练习单词及基础对话。而现在通过ChatGPT&#xff0c;除了不受时空限制外&#xff0c;即时性与定制性都能被满足&#xff0c;只…

六大需求管理工具:满足您的需求管理需求

在项目开发和产品设计中&#xff0c;需求管理是确保项目成功的关键所在。通过使用专业的需求管理工具&#xff0c;团队可以更好地追踪、记录和分析需求&#xff0c;提高工作效率并确保项目按时完成。 市场上有许多需求管理工具可供选择&#xff0c;当下有什么好用的需求管理工…

全国三网优惠话费充值接口开发指南

一、文档综述 近期想做项目的看过来~三网&#xff08;全国移动、联通、电信&#xff09;话费、电费充值接口能够实现将接口接入到小程序或者app上面&#xff0c;通过接口提交号码和金额进行充值&#xff0c;可以帮助相关人员快速完成接口对接与联调&#xff0c;平台用户可以通…

【PLC】上位机通过SMLP协议与三菱FX5U通信

0. 准备步骤 准备三菱 FX5U PLC 0.1 安装 GX Works3 首先点击右侧链接进入三菱官网&#xff0c;下载 GX Works3&#xff08;需要注册三菱的账号&#xff09; 若不想进官网下载也可以下载我为大家准备的网盘安装包&#xff1a;百度网盘安装包 GX Works3 下载完成后解压&#…

交换2个元素的值(3种方法)

1.创建临时变量 int main() {int a10;int b20;int tmp0;printf("before:a:%d,b:%d\n",a,b);tmpa;ab;btmp;printf("after :a:%d,b:%d\n",a,b);return 0; }2.加减法 int main() {int a10;int b20;printf("before:a:%d,b:%d\n",a,b);aab;ba-b;aa-…

Java——finally的作用和常用场景

finally介绍&#xff0c;finally一定会执行吗 finally 一般搭配 try--catch--finally 或者 try--finally 使用。 一般来说&#xff0c;无论try中是否抛出异常&#xff0c;都会执行finally。 finally也并不是一定会执行的&#xff0c;finally没有执行的可能&#xff1a; 1、JVM…

PoseiSwap 更新质押系统,并将在 8 月18 日开启“Trident ”快照

自 DeFi Summer 后&#xff0c;DeFi 设施整体的形态并未发生本质的变化&#xff0c;我们看到 DeFi 应用仍旧不具向外长期捕获价值、用户的能力&#xff0c;老旧叙事导致 DeFi 赛道整体的发展停滞不前。伴随着行业进入到下行周期&#xff0c;DeFi 赛道的资金、用户不断出逃&…

NOTA标记多肽氨基酸试剂,NOTA-E(cRGDfK)2的化学特性

今日文章关键词&#xff1a;DOTA 偶联肽&#xff0c;NOTA-E(cRGDfK)2&#xff0c;NOTA标记多肽氨基酸试剂 产品描述&#xff1a;DOTATATE acetate 是一种 DOTA 偶联肽&#xff0c;可以被放射性核素标记以用于正电子发射断层扫描 (PET) 成像和肽受体放射性核素治疗 (PRRT)。 英…