leetcode_[python/C++逐步深入] 43. Multiply Strings_(大数乘法分析)

FRM(Financial Risk Manager,金融风险管理师)知识点总结归纳 FRM知识点总结(150字) FRM考试分为两级:一级侧重基础理论和工具,包含风险管理基础、定量分析、金融市场产品、估值与风险建模四大模块,涵盖风险管理框架、统计学方法、衍生品定价及VaR计算等核心内容。二级聚焦实际应用,分为市场风险、信用风险、操作风险、流动性风险、投资管理和市场前沿六大模块,深入探讨高级风险度量技术(如极值理论)、信用风险模型、巴塞尔协议及新兴风险议题。考试体系贯穿"风险识别→度量→管理→监管"逻辑主线,强调定量分析与实务案例的结合,覆盖传统金融风险和区块链、ESG等 阅读详情

题目链接
【题目】
Given two numbers represented as strings, return multiplication of the numbers as a string.

Note:
The numbers can be arbitrarily large and are non-negative.
Converting the input string to integer is NOT allowed.
You should NOT use internal library such as BigInteger.


【分析】
先看下python的写法:
使用reduce是及其简便的写法,而且效率很高

class Solution(object):
    def multiply(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        num1 = reduce(lambda x, y: x * 10 + y, [ord(i) - 48 for i in num1]) # '0' is 48 in ascii
        num2 = reduce(lambda x, y: x * 10 + y, [ord(i) - 48 for i in num2])
        return str(num1 * num2)

打败了95%
这里的[ord(i) - 48 for i in num]可以改写成map形式,会快那么一点点

class Solution(object):
    def multiply(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """       
        i = reduce(lambda x,y : 10 * x + y,map(lambda g:ord(g)-48,num1))
        j = reduce(lambda x,y : 10 * x + y,map(lambda g:ord(g)-48,num2))
        return str(i * j)

99%


C++
将num1,num2翻转
然后两个循环,O(mn)复杂度

class Solution {
public:
    string multiply(string num1, string num2) {
        int size1 = num1.size();
        int size2 = num2.size();
        vector<int> ans(size1+size2,0);
        reverse(num1.begin(),num1.end());
        reverse(num2.begin(),num2.end());
        for(int i=0;i<size1;i++){
            for(int j=0;j<size2;j++){
                ans[i+j] += (num1[i]-'0')*(num2[j]-'0');
                ans[i+j+1] += ans[i+j]/10;
                ans[i+j] = ans[i+j]%10;
            }
        }
        int g;
        string answer="";
        for(g = size1+size2-1;g>0&&ans[g] == 0;g--);
        for(;g>=0;g--){
            answer+=(ans[g]+'0');
        }
        return answer; 

    }
};

discuss里面也有不用翻转的写法,就是简单得索引

string multiply(string num1, string num2) {
    string sum(num1.size() + num2.size(), '0');

    for (int i = num1.size() - 1; 0 <= i; --i) {
        int carry = 0;
        for (int j = num2.size() - 1; 0 <= j; --j) {
            int tmp = (sum[i + j + 1] - '0') + (num1[i] - '0') * (num2[j] - '0') + carry;
            sum[i + j + 1] = tmp % 10 + '0';
            carry = tmp / 10;
        }
        sum[i] += carry;
    }

    int startpos = sum.find_first_not_of("0");
    if (string::npos != startpos) {
        return sum.substr(startpos);//这些操作全都返回 string::size_type 类型的值,
        //以下标形式标记查找匹配所发生的位置;或者返回一个名为 string::npos 的特殊值,
        //说明查找没有匹配。string 类将 npos 定义为保证大于任何有效下标的值。
    }
    return "0";
}

discuss里还有一种java写的按位来计算的方法,效率不是很快但挺开放性的思维原地址戳这里
这里写图片描述

public String multiply(String num1, String num2) {
    int m = num1.length(), n = num2.length();
    int[] pos = new int[m + n];

    for(int i = m - 1; i >= 0; i--) {
        for(int j = n - 1; j >= 0; j--) {
            int mul = (num1.charAt(i) - '0') * (num2.charAt(j) - '0'); 
            int p1 = i + j, p2 = i + j + 1;
            int sum = mul + pos[p2];

            pos[p1] += sum / 10;
            pos[p2] = (sum) % 10;
        }
    }  

    StringBuilder sb = new StringBuilder();
    for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);
    return sb.length() == 0 ? "0" : sb.toString();
}
Unreal 从入门到精通之VR常用操作 本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。 阅读详情

相关推荐

利用alpha-beta剪枝实现的黑白棋小程序

我写的人工智能小程序,黑白棋游戏,棋力还不错。参考了WZebra的代码,用一种“二合一”的方法实现了alpha-beta剪枝。

C++实现大数相乘算法

主要为大家详细介绍了C++实现大数相乘算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

RiPro主题易支付插件 日主题易支付接口模块.zip

此支付模块目前已支持日主题系列下RiPro主题V9.0版本 -模块为V1.2版本RiPlus主题V2.7版本-模块为V1.2版本RiPro-V2主题V4.5版本-模块为V1.2版本Rizhuti-v2主题V2.5版本-模块为V1.2版本直接上传解压无需任何复杂操作即可对接你想对接的易支付平台!使用方式:1.下载文件到本地并上传到您站点的根目录;2.把压缩包解压会得到一个说明文件和一个模块,不用做其他任何其他的操作;3.进入到你的网站后台当中,找到主题设置->商城设置->易支付[拉到页面最底部;4.填写到你选择的易支付对应的支付ID 秘钥 和 易支付平台的支付接口地址,然后点击保存即可,这样就配置好了。

LeetCode43.字符串相乘大数相乘可用此方法)

leecode题链接:LeetCode43.字符串相乘 题目描述: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 输入: num1 = “2”, num2 = “3” 输出: “6” 示例 2: 输入: num1 = “123”, num2 = “456” 输出: “56088” 说明: num1 和 num2 的长度小于110。 num1 和 num2 只包含数字 0-9。 num1 和 num2 均不以零开头

FussyCat的博客 376

C++大数相乘(高精度乘法)

高精度乘法 高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,我们可以将这个数字拆开,拆成一位一位的,或者是几位几位的存储到一个数组中, 用一个数组去表示一个...

一氧化二氢的执着 3368

LeetCode 题解 | 43. 字符串相乘大数相乘 高精度 x 高精度 C++

来源:https://leetcode-cn.com/problems/multiply-strings/ class Solution { public: vector<int> mul(vector<int> &A, vector<int> &B) { vector<int> C(A.size() + B.size(), 0); for (int i = 0; i < A.size(); i+

捡起一束光的博客 349

LeetCode 43 大数相乘

代码已通过,待优化。 class Solution { public: string add(string num1, string num2){ string ans = ""; int i = num1.length() - 1; int j = num2.length() - 1; int jin = 0; int sum = 0; while(0 <= i && 0 .

一个小孩 388

LeetCode 43. 字符串相乘大数相乘

在说大数相乘问题之前,我们先来看一下在算法竞赛中使用起来非常方便快捷的C++模板类vector 1. 不定长数组vector C语言在声明和定义一个数组时,必须要事先指定数组的长度,这就不利于数组中元素的动态增长,而C++引入了不定长数组vector,就能很好的解决这个问题,这也是vector受到广大acm竞赛选手青睐的原因所在。 vector是一个标准模板类,所以需要用vector A 或 vector B来声明一个vector,vector声明一个整数数组,而vector声明一个字符串数组。 vec

weixin_44530058的博客 866

[leetcode] 43 Multiply Strings(模拟大数乘法)

很简单的题目,模拟大数乘法。 思路:  第一个字符串的第i位乘以第二个字符串的第j位一定是结果的第i+j位,如果i+j已经有值,直接加上去就OK,并用temp保存进位, 最后记得将结果反转,去掉前置0。这样的算法的复杂度是O(n2).利用FFT可以将算法优化到O(nlogn),关于FFT的实现在此不再赘述,可以参考算法导论或者网上其他资料。 另外,我的博客中实现

NK_test的博客 4910

[ Leetcode ] #43 Multiply StringsC++ & Python3)

题目: Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. Example 1: Input: num1 = "2", num2 = "3" Output: "6" E...

xn's blog 266

[leetcode] 43. Multiply Strings

Description Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. 字符串相乘PythonC++代码实现。

Learning from the mistakes 283

LeetCode探索之旅(107)-43 Multiply strings

今天继续刷LeetCode,第43题,求两个字符串的乘积。 分析: 根据乘法的步骤,首先计算最后一位与另一个数的乘积,然后加上前一位与另一个数的乘积并乘以10,依次计算。 问题: 1、数与数相乘,会有进位; 2、初始化一个大的空的字符串中,将计算结果放入该字符串中。 3、Python中没有大数计算困难。 附上C++代码: class Solution { public: string mu...

JerryZengZ的博客 176

LeetCode43. Multiply Strings 解题报告(Python & C++

LeetCode43. Multiply Strings 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/multiply-strings...

负雪明烛 4243

LeetCode开心刷题二十三天——43Multiply Strings 44. Wildcard Matching

43.Multiply Strings Medium 1069486FavoriteShare Given two non-negative integersnum1andnum2represented as strings, return the product ofnum1andnum2, also represented as a stri...

weixin_30920513的博客 198

LeetCode - 解题笔记 - 43 - Multiply Strings

Multiply Strings Solution 1 大数乘法练习题,数组操作的基本练习题。就是将竖式乘法模拟一遍就可以了。乘数从低到高逐位遍历,乘上被乘数,结果按照合适的位置加到对应的位置(这里需要考虑一下位置换算)即可。但是我自己写的超时了……,尽管我注意到string比数组占空间,但是官方题解字符串相乘 - 字符串相乘 - 力扣(LeetCode(leetcode-cn.com)里还提供了一个改进的加法进位处理思路:先保留结果,然后一次遍历处理进位(我是写成了乘一位就处理一次,应该是我想的不好)

支锦铭的博客 318

Leetcode 43: Multiply Strings 大数相乘算法

给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。 示例2: 输入: num1 = "123", num2 = "456" 输出: "56088" class Solution(object): def multiply(self, num1, num2): """ :...

gt362ll的博客 425

力扣(LeetCode)152. 乘积最大子数组(C++)

【墨染】序列dp之乘积最大子数组,朴素dp || 滚动数组优化

墨染 1244

leetcode】三个数的最大乘积 c++

题目描述: 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例1: 输入:nums = [1,2,3] 输出:6 示例2: 输入:nums = [1,2,3,4] 输出:24 示例3: 输入:nums = [-1,-2,-3] 输出:-6 提示: 3 <= nums.length <= 104 -1000 <= nums[i] <= 1000 代码: class Solution { public: int find_fi

mie haha 1105

Leetcode第628题 三个数的最大乘积C++解法

class Solution { public: int maximumProduct(vector<int>& nums) { int high1=-1001,high2=-1001,high3=-1001,low1=1001,low2=1001; for(int i=0;i<nums.size();i++) { if(nums[i]>=high1) {hi

梅杏柿的博客 375

力扣-43题 字符串相乘C++- 大数相乘

【代码】力扣-43题 字符串相乘C++- 大数相乘

qq_40467670的博客 552
上一篇: leetcode_[python/C++逐步深入]_217. Contains Duplicate(深度分析位操作算法)
下一篇: leetcode_[python/C++]_19. Remove Nth Node From End of List(删除链表末第n个节点)
Mosen_Huang
博客等级 码龄12年 36粉丝 44原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值