字符串型的数字相加减_每日“力扣”系列25 字符串相乘

15746d7a04ec8ffaa8b6b653213e92c0.png

今天继续“字符串”标签,力扣第43题,题目难度“中等。是一道十分有意思的题目,我们来看一下:

847eb2fbc1a28df3e653d36ef7a6e864.png

目的是将两个表示为了字符串的数字,进行相乘,然后将结果还作为字符串进行输出。

这个题目里面我们要注意的是:

这个表示数字的字符串或者结果,可能已经超过了常规 int 型能够表示的范围,所以不能够使用直接转化的思路。(同时这一点在说明中也提到了)

要想解决这个题目,我们可以参考小学时候学到的“竖式”方法,使用乘法的最原始算法来计算这个题目。

3cba4809cb8c2c1bda22b618286d6087.png
竖式举例(网络图片)

要进行竖式计算,我们需要使用第二行的数字,逐位与第一行的数字进行相乘,最后将中间的结果依次相加。

为了减少循环次数,一般我们是将短的序列放置在下层。

要实现这个算法,我们可以通过这样的代码实现:

public 

首先仍然是将特殊情况,即有零存在的情况排除。然后计算两个字符串的长度,为了方式计算过程中出现位数不够的情况,我们取 len = len1+len2来作为暂存按位计算获得的数组的长度值。

然后,按照之前说的,为了减少循环的复杂度区分长短字符串进行处理(如果不区分,仍然可以获得正确结果)。代码中②。

进入按位相乘的方法后,暂时不考虑进位的问题,将每一位的相乘结果直接保存在相关的位置上。这里需要注意⑥的位置,思考一下竖式相乘中得移位,你就会发现这样做的含义了。

在按位计算完成后,回到主函数,再次回来考虑进位的问题。即代码中的③的位置。

最后,由于结果要求是字符串,最后将结果保存为字符串来返回。

今天的算法就是这样。

本系列主要是为了记录,也欢迎大家支出问题,或者来搭伴共同学习。欢迎大家评论点赞关注!

王进林:菜鸡刷LeetCode系列记录24 寻找字符串​zhuanlan.zhihu.com
e2ff6c4cc1ba3a2522dc607712737cf9.png
王进林:菜鸡刷LeetCode系列记录23 括号生成​zhuanlan.zhihu.com
f67432e96cf14894b1bca8b950e9be82.png

下一篇:

王进林:菜鸡刷LeetCode系列记录26 字母异位词​zhuanlan.zhihu.com
d570d186dd45601ba7ba85661988e498.png

今天的配图为“贝加尔湖”,图片来自网络,侵删。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值